使用导入模块进行多处理

时间:2014-05-14 21:25:01

标签: python multiprocessing

我想知道多处理是否可以限制在单独的python模块中。例如,如果我有一个带有多处理的python模块,那么:

#example.py
def f(q, a, m='No'):
    print m
    q.put(a)

if __name__ == '__main__':
    a = '123'
    m = 'Yes'
    q = Queue()
    p = Process(target=f, args=(q, a, m))
    p.start()
    print q.get()
    p.join()

无论如何在另一个脚本中使用它作为使用导入的模块,同时仍保留多处理:

#Call from another script
import example
example.f(q, a)
>>> 'Yes'    #Confirmation that multiprocessing was used

1 个答案:

答案 0 :(得分:3)

是的,您可以通过创建类或函数来实现此目的。您可以导入另一个脚本。 以下是一个类的示例:

# example.py
from multiprocessing import Process

class Example(object):
    def __init__(self, queue):
        """
        @type queue: multiprocessing.Queue
        """
        self.q = queue

    def run(self, a, m=None):
        p = Process(target=self.f, args=(a, m))
        p.start()
        print self.q.get()
        p.join()

    def f(self, a, m='No'):
        print m
        self.q.put(a)

然后从您的示例导入:

>>> from multiprocessing import Queue
>>> from example import Example
>>> q = Queue()
>>> e = Example(q)
>>> e.run('123', m='Yes')
Yes
123