如何将多进程更改为单进程
Posted
技术标签:
【中文标题】如何将多进程更改为单进程【英文标题】:How to change multiprocess to single process 【发布时间】:2021-11-09 08:25:05 【问题描述】:这是一些代码
如何将当前的多进程部分改为单进程?
import multiprocessing
def process(self):
if product != 0:
if self.mlist.check(file_dictionary):
self.mlist.patch(file_dictionary)
process = multiprocessing.Process(target = self.mlist.job, args = (file_dictionary, targ))
self.multiprocess_list.append(process)
process.start()
def wait(self):
process_list = self.multiprocess_list
for i in process_list:
i.join(2)
【问题讨论】:
不用process = multiprocessing.Process(target = self.mlist.job, args = (file_dictionary, targ))
,直接调用self.mlist.job(file_dictionary, targ)
即可。但是,现在无论需要多长时间,您都将阻塞直到函数返回。
【参考方案1】:
下一次,请提供一个最小的可重现示例,如下所示:
import multiprocessing
def doSomething(k: str, v: int):
print(f"key=k, value=v")
if __name__ == "__main__":
data = "a": 1, "b": 2, "c": 3
processes = []
for key, value in data.items():
process = multiprocessing.Process(target=doSomething, args=(key, value))
processes.append(process)
for process in processes:
process.start()
for process in processes:
process.join()
现在,将import multiprocessing
替换为
class multiprocessing: # Fake multiprocessing, not multiprocessing at all
def __init__(self, target, args):
self.target = target
self.args = args
@staticmethod
def Process(target, args):
return multiprocessing(target, args)
def start(self):
self.target(*self.args)
def join(self):
pass
这个想法是您提供完全相同的接口(相同的名称),但不进行多处理。您可以轻松地在多处理之间切换。
multiprocessing
不再是库而是类
multiprocessing.Process
不再是进程对象的构造函数,而是静态方法
start()
只是调用方法
join()
什么都不做,因为它已经同步运行了
【讨论】:
以上是关于如何将多进程更改为单进程的主要内容,如果未能解决你的问题,请参考以下文章