Python: 启动执行另一个对象方法的新进程
Python: start new process that executes another object's method
我想启动一个新进程,该进程将创建一些其他对象,然后调用该对象 loops_forever 方法。
我尝试使用 Python 的多处理模块,如我之前的 SO 问题所述:
这是我尝试过的:
import OtherService
from multiprocessing import Process
my_other_service = OtherService(address=ADDRESS)
my_other_process = Process(target=my_other_service.loops_forever)
my_other_process.start()
此解决方案的问题是创建的对象 (OtherService) 不可序列化,我在上面的最后一行中收到 "can't pickle _thread.lock object" 错误。
如何从我的主进程启动一个新进程 class,并告诉该进程创建一个新的 OtherService 对象(仅向该进程传递地址参数),然后告诉该其他进程调用 loops_forever?
请注意,该解决方案不必使用 python 多处理,我将使用最有意义的包。
你的问题已经有了答案,是英文的。你只需要将它翻译成代码。
tell that process to create a new OtherService object (handing that process only the address parameter) and then tell that other process to call loops_forever?
创建一个简单的新函数,它将获取一个地址,创建一个 OtherService
对象,并调用它的 loops_forever()
方法。 这个 函数是作为您创建的新进程的 target
传递的函数。
像这样:
def create_service_and_loop(address):
service = OtherService(address)
service.loops_forever()
proc = multiprocessing.Process(target=create_service_and_loop, args=(ADDRESS,))
proc.start()
我想启动一个新进程,该进程将创建一些其他对象,然后调用该对象 loops_forever 方法。
我尝试使用 Python 的多处理模块,如我之前的 SO 问题所述:
这是我尝试过的:
import OtherService
from multiprocessing import Process
my_other_service = OtherService(address=ADDRESS)
my_other_process = Process(target=my_other_service.loops_forever)
my_other_process.start()
此解决方案的问题是创建的对象 (OtherService) 不可序列化,我在上面的最后一行中收到 "can't pickle _thread.lock object" 错误。
如何从我的主进程启动一个新进程 class,并告诉该进程创建一个新的 OtherService 对象(仅向该进程传递地址参数),然后告诉该其他进程调用 loops_forever?
请注意,该解决方案不必使用 python 多处理,我将使用最有意义的包。
你的问题已经有了答案,是英文的。你只需要将它翻译成代码。
tell that process to create a new OtherService object (handing that process only the address parameter) and then tell that other process to call loops_forever?
创建一个简单的新函数,它将获取一个地址,创建一个 OtherService
对象,并调用它的 loops_forever()
方法。 这个 函数是作为您创建的新进程的 target
传递的函数。
像这样:
def create_service_and_loop(address):
service = OtherService(address)
service.loops_forever()
proc = multiprocessing.Process(target=create_service_and_loop, args=(ADDRESS,))
proc.start()