我正在单独的线程中执行函数,并且希望通过队列传递参数。因此,函数应该理想地能够接受封装在一个变量中的所有变量
类似:
v = ('arg1', kwarg1='val1', kwarg2='val2')
def print_arg(*args, **kwargs):
print('args:{}\nkwargs:{}'.format(args, kwargs))
print_arg(v)
有什么简单的方法可以实现这一目标吗?
谢谢
答案 0 :(得分:0)
一种执行此操作的方法可能是在主线程中构建队列,并将其作为参数传递给您创建的线程:
q = queue.Queue()
thread1 = threading.Thread(target=main_function,args(q,other_args))
在任一线程中,使用put方法将信息作为字符串添加到队列:
q.put(str(important_variable))
使用get方法从队列中检索此信息
important_variable = q.get()
如果传递多个变量或信息,请使用多个队列或构造放入队列的内容,以使您知道要从队列中取出的内容。
答案 1 :(得分:0)
是的,您可以将所有参数存储在单个变量中,但仍然需要将位置参数与关键字参数分开存储。没有可以同时用作序列和映射的数据结构。
这里是一种方法:
v = ['arg1'], {'kwarg1': 'val1', 'kwarg2': 'val2'}
print_arg(*v[0], **v[1])
这有点乏味且难以阅读,因此我们可以将整个内容封装在一个类中:
class ArgumentBundle:
def __init__(self, *args, **kwargs):
self.args = args
self.kwargs = kwargs
def call(self, function):
return function(*self.args, **self.kwargs)
v = ArgumentBundle('arg1', kwarg1='val1', kwarg2='val2')
v.call(print_arg)