当我尝试在其他文件中运行函数时,Python多处理失败

时间:2019-09-29 15:35:25

标签: python multiprocessing queue

我尝试使用 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()

1 个答案:

答案 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 ] )