我正在学习多处理模块。 Here是函数调用至少对我来说很奇怪的例子。传递参数以逗号结尾(似乎最后一个参数是空的或遗忘或者奇怪的东西),例如
#!/usr/bin/python
from multiprocessing import Pool
def f(x):
return x*x
if __name__ == '__main__':
pool = Pool(processes=4) # start 4 worker processes
result = pool.apply_async(f, (10,)) # evaluate "f(10)" asynchronously
print result.get(timeout=1) # prints "100" unless your computer is *very* slow
或者这个
#!/usr/bin/python
from multiprocessing import Pool
def f(x):
return x*x
if __name__ == '__main__':
pool = Pool(processes=4) # start 4 worker processes
result = pool.apply_async(f, [10,]) # evaluate "f(10)" asynchronously
print result.get(timeout=1) # prints "100" unless your computer is *very* slow
或者,这是使用命名参数
进行调用的地方#!/usr/bin/python
from multiprocessing import Process, Queue
def f(q):
q.put([42, None, 'hello'])
if __name__ == '__main__':
q = Queue()
p = Process(target=f, args=(q,))
p.start()
print q.get() # prints "[42, None, 'hello']"
p.join()
还有一些例子,传递参数是以“经典”(arg1,arg2)
的方式完成的,我尝试修改上面的例子并删除最后一个逗号,但我生成错误。首先,我认为那些错过的参数与Process
类一起使用,而那些“经典”参数与Pool
一起使用,但在提到的网站上有例外。 这个惯例是什么意思? (arg1,)
和(arg1)
之间有什么区别?
修改
正如评论中提到的那样type((1,))
返回元组,其中type((1))
返回int。但是f(x)
函数需要元组吗?