我是新手,在python中进行多处理,到目前为止,我看到的所有示例都是这种示例(文件中有一个或多个方法,然后' main (:
from multiprocessing import Process
def f1(a):
#do something
def f2(b):
#do something
if __name__ == '__main__':
f1(a1)
p = Process(target=f2, args=(b2,))
p.start()
p.join()
如果我有一个方法,该方法将在另一个文件中称为另一个文件中的2个函数,例如以下行,
def function():
#do something
file2.f1(a) #first concurrent method
file2.f2(b) #second concurrent method
我应该怎么做?谁能举一个简单的例子?我以这种方式尝试了,但是它在第一个循环之后再次启动了所有程序:
def function():
#do something
for i in range(3):
p1 = Process(target=file2.f1, args=(a)) #first concurrent method
p2 = Process(target=file2.f2, args=(b)) #second concurrent method
p1.start()
p2.start()
p1.join()
p2.join()
问题似乎是args varialbe的定义错误,它应该是元组,而不是一个变量:
def function():
#do something
for i in range(3):
p1 = Process(target=file2.f1, args=(a, )) #first concurrent method
p2 = Process(target=file2.f2, args=(b, )) #second concurrent method
p1.start()
p2.start()
p1.join()
p2.join()
如果您的执行顺序灵活,则可以使用池类类触发多个呼叫:
from multiprocessing.pool import Pool
pool = Pool()
pool.map_async(f1, [(arg, )] * 3)
pool.map_async(f2, [(arg, )] * 3)
pool.close()
pool.join()