我尝试使用 multiprocessing 模块并行处理一些数据。当我将所有代码都放在一个文件中时,一切正常。我决定将代码拆分为单独的文件(所有文件都在同一目录中),但是多处理功能不再起作用。你能帮我吗?
这是一个最小的工作示例。所有代码都在同一个文件中。
foo.py
from multiprocessing import Process, Queue
def process_data( q, msg1, msg2 ):
q.put( [ msg1, msg2 ] )
if __name__ == '__main__':
q = Queue()
p = Process( target=bar.run, args=( q, "Hello", "World" ) )
p.start()
result = q.get()
print( result )
p.join()
这是无效的示例。现在,process_data函数位于另一个文件(bar.py)中,看来result = q.get()
将永远不会返回!这两个文件都在同一目录中:
bar.py:
def process_data( msg1, msg2 ):
q.put( [msg1, msg2 ] )
foo.py:
from multiprocessing import Process, Queue
import bar
if __name__ == '__main__':
q = Queue()
p = Process( target=bar.process_data, args=( q, "Hello", "World" ) )
p.start()
result = q.get()
print( result )
p.join()
答案 0 :(得分:0)
您在process_data
中描述的bar.py
函数只有2个参数(msg1, msg2)
,但是它必须有3个参数(q, msg1, msg2)
,因为在创建流程时,您需要传递这3个参数对此:
p = Process( target=bar.process_data, args=( q, "Hello", "World" ) )
只需将process_data
中的bar.py
函数定义更改为:
def process_data( q, msg1, msg2 ):
q.put( [msg1, msg2 ] )