使用python和BaseProcess类进行多处理

2024-09-27 21:28:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试用python在另一个进程中启动一个函数,如下所示:

from multiprocessing.process import BaseProcess
import os

class MyProcess(BaseProcess):
    def __init__(self):
        self._identity = ()
        self._name = 'ProcessController'
        self._parent_pid = os.getpid()
        self._popen = None

    def run(self):
        print("Launching foo..." + str(os.getpid()))
        Foo()



if __name__ == '__main__':
    print("pid : " + str(os.getpid()))
    MyProcess().start()

但我有个错误:

Traceback (most recent call last): File "...\Main.py", line 27, in MyProcess().start() File "C:\Python34\lib\multiprocessing\process.py", line 105, in start self._popen = self._Popen(self) TypeError: _Popen() takes 1 positional argument but 2 were given

我的目的当然是有两个不同的PID为2“打印”。我找不到如何做到这一点,我没有从多处理中找到Process类(就像我在doc中看到的)。我做错什么了?在


Tags: nameimportselfosdefmultiprocessingprocesspid
1条回答
网友
1楼 · 发布于 2024-09-27 21:28:02

只需直接子类Process,而且一定要在自己的__init__中调用它的__init__

from multiprocessing import Process
import os

class MyProcess(Process):
    def __init__(self, name='ProcessController'):
        super().__init__(name=name)

    def run(self):
        print("Launching foo..." + str(os.getpid()))
        Foo()



if __name__ == '__main__':
    print("pid : " + str(os.getpid()))
    MyProcess().start()

注意,我还遗漏了您定义的一些实例变量,这些变量也在BaseProcess中定义,因为您确实不应该重写这些变量。我还将您的自定义名称传递给Process.__init__,因为这是设置它的正确方法,而不是直接设置self._name。在

在源代码中很难找到Process的原因是multiprocessing包以某种奇怪的方式从python3.4开始填充顶层的{}模块;它最终来自multiprocessing.context

^{pr2}$

相关问题 更多 >

    热门问题