python - 使用多处理库在同一类中运行并发进程
问题描述
我需要与“多处理”库并行运行多个类函数,但我无法找到针对我的具体问题的指南或答案。我的问题是只有第一个进程正在启动(或正在运行我不知道这里的确切区别)。
为了说明这个问题,我设置了以下示例:
import multiprocessing
import time
class parallel_printer(multiprocessing.Process):
def __init__(self, freq_0, freq_1, freq_2):
self.freq_0 = freq_0
self.freq_1 = freq_1
self.freq_2 = freq_2
def print_0(self):
while True:
now = time.localtime()
if now.tm_sec % self.freq_0 == 0:
print('printer 0')
time.sleep(1.0)
def print_1(self):
while True:
now = time.localtime()
if now.tm_sec % self.freq_1 == 0:
print('printer 1')
time.sleep(1.0)
def print_2(self):
while True:
now = time.localtime()
if now.tm_sec % self.freq_2 == 0:
print('printer 2')
time.sleep(1.0)
def start_printer(self):
p_0 = multiprocessing.Process(target = self.print_0())
p_1 = multiprocessing.Process(target = self.print_1())
p_2 = multiprocessing.Process(target = self.print_2())
p_0.start()
p_1.start()
p_2.start()
class Tester(object):
def __init__(self):
self.freq_0 = 3
self.freq_1 = 7
self.freq_2 = 11
self.parallel_printer = parallel_printer(self.freq_0, self.freq_1, self.freq_2)
def start_Tester(self):
self.parallel_printer.start_printer()
if __name__ == '__main__':
tester = Tester()
tester.start_Tester()
解决方案
正如您可以在 Python 文档中阅读的那样multiprocessing.Process
,您需要为target
参数传递“调用对象”。
您的代码应如下所示:
p_0 = multiprocessing.Process(target=self.print_0)
p_1 = multiprocessing.Process(target=self.print_1)
p_2 = multiprocessing.Process(target=self.print_2)
如果你写self.print_0()
而不是self.print_0
,你不会像你应该做的那样传递调用对象,而是调用函数并传递返回值。
推荐阅读
- r - 从两个数据集中创建唯一列名的组合而不循环
- c# - ElasticSearch 7.x NEST 客户端与 ES 6.x 的兼容性
- java - 当用户在图库中保存新照片时收到通知
- html - 表格的滚动条
- python - Pyglet 无法加载 .wav 文件
- javascript - Socket.io 删除了我的 javascript 对象的一些数据
- ios - 如何在swift3 iOS中将文本写入保存在服务器上的文件
- solr - 如何让 SolrCloud 使用 HTTPS 创建集合?
- v8 - 在 linux 平台上编译 V8 失败
- python - __init__() 接受 1 个位置参数,但在一个非常简单的表单函数上给出了 2 个错误