所以我一直在python中使用* args ** kwargs功能一段时间,我遇到了一个问题,我似乎无法在stackoverflow上的文档/这里找到解决方案。
我有一个多线程作业,它并行地向服务器发送请求,然后对返回的JSON进行一些分析。我需要为每个请求 - 响应对写一个csv文件行。
因为这是并行完成的,所以在线程作业函数中写入csv会有问题。我想出的解决方案是将分析结果放在一个队列中,然后创建一个函数从que中分析中获取它并按顺序将其写入csv。
现在到了真正的问题: 我必须写入csv的函数接受参数和关键字参数,但是que不知道如何处理它。
有没有办法将* args ** kwargs放入一个que然后逐个获取它们并将它们传递给另一个函数?
我想要一些看起来像这样的东西:
csv_que = Queue()
# put arguments to the que which will be written later
def write_row_to_que(self,*args, **kwargs):
csv_que.put(*args, **kwargs)
# send each argument in the que to the write_row function with the arguments
#from the que
def csv_writer_func():
while True:
args, kwargs = csv_que.get()
write_row(args, kwargs)
我不知道这是否是解决这个问题的正确方法,但我很想听到一些想法,如果这个功能(将参数传递给一个que然后从中拉出来)是可能的。
答案 0 :(得分:1)
只需将实际对象作为元组传递,而无需解压缩它们:
csv_que = Queue()
# put arguments to the que which will be written later
def write_row_to_que(self,*args, **kwargs):
csv_que.put((args, kwargs))
# send each argument in the que to the write_row function with the arguments
#from the que
def csv_writer_func():
while True:
args, kwargs = csv_que.get()
write_row(args, kwargs)
答案 1 :(得分:1)
这个mod应该足以让你入门:
def write_row_to_que(self,*args, **kwargs):
csv_que.put( (args, kwargs) )
将参数放入元组中,另一端的get()
方法将检索它们。
args, kwargs = csv_que.get()
此行将检索项目,但是:
args
将是未命名参数的元组。kwargs
将是最初提供的关键字参数的字典。