共享相同的多处理池不同python实例之间的对象

2024-04-19 23:06:01 发布

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

在python3中,我需要一个进程池,在其中异步应用多个worker。你知道吗

问题是,我需要从一系列独立的Python进程将worker“发送”到池中。 因此,所有worker都应该在相同的Pool实例中执行。你知道吗

注意:目标是在不使用所有计算机资源的情况下处理大量数据。你知道吗

具有以下multi.py示例代码:

import multiprocessing
from time import sleep

def worker(x):
    sleep(5)
    return x*x

if __name__ == "__main__":
    pool = multiprocessing.Pool(processes=int(multiprocessing.cpu_count()/2)) # Using half of the CPU cores

    for i in range(10):
        pool.apply_async(worker, args=(i,))

我需要打开多个multi.py实例,将worker附加到同一个池中。你知道吗

阅读official documentation我无法理解这样做的方法。 我知道我需要一个Manager()但是我应该怎么用呢?你知道吗

有没有用Python的方式或者任何有工作代码的人对此提出建议?你知道吗

谢谢大家。你知道吗


Tags: 实例代码pyimport目标进程计算机sleep
1条回答
网友
1楼 · 发布于 2024-04-19 23:06:01

最后,我使用python3 BaseManager编写了一个基本的工作示例。请看这里的docs。你知道吗

在一个叫做服务器.py地址:

jobs = multiprocessing.Manager().Queue()
BaseManager.register('JobsQueue', callable = lambda: jobs)
m = BaseManager(address=('localhost', 55555), authkey=b'myauthkey')
s = m.get_server()
s.serve_forever()

然后在一个或多个脚本中客户端.py地址:

BaseManager.register('JobsQueue') # See the difference with the server!
m = BaseManager(address=('localhost', 55555), authkey=b'myauthkey') # Use same authkey! It may work remotely too...
m.connect()
# Then you can put data in the queue
q = m.JobsQueue()
q.put("MY DATA HERE")
# or also
data = q.get()
# etc etc...

显然,这是一个基本示例,但我认为它提供了在不使用外部库的情况下执行大量复杂工作的功能。你知道吗

今天很多人都指望一个现成的,通常是巨大的重量,图书馆或软件,而不了解基本知识。我不是他们中的一员。。。你知道吗

干杯

相关问题 更多 >