使用带多处理模块的python redis
我是PythonRedis模块的新手,我正在寻找一种在使用python多处理模块时有效地共享连接的方法。我的代码如下:使用带多处理模块的python redis,python,redis,multiprocessing,connection-pooling,Python,Redis,Multiprocessing,Connection Pooling,我是PythonRedis模块的新手,我正在寻找一种在使用python多处理模块时有效地共享连接的方法。我的代码如下: import multiprocessing as mp import Queue import os import time import redis def _process_messages_parallel(messages): processes=[mp.Process(target=_process_message, args=[message]) for
import multiprocessing as mp
import Queue
import os
import time
import redis
def _process_messages_parallel(messages):
processes=[mp.Process(target=_process_message, args=[message]) for message in messages]
for process in processes:
process.daemon=False
process.start()
for process in processes:
process.join()
def _process_message(message):
organization=message['organization']
#get value associated with `organization` key from redis
result=get_val_from_redis(organization)
#process result
#assume local redis instance for now.
def get_val_from_redis(organization,host='localhost',port='6379'):
conn=redis.StrictRedis(host=host,port=port,db=db,retry_on_timeout=retry_on_timeout)
return conn.get(organization)
if __name__=="__main__":
messages=[{'organization':'org1'},{'organization':'org2'},{'organization':'org3'},...{'organization':'orgN'}]
process_articles=mp.Process(target=_process_messages_parallel,args=[messages])
process_articles.daemon=False
process_articles.start()
process_articles.join()
在这里,我想在由
\u process\u messages\u parallel
函数创建的不同进程之间重新使用相同的连接池。有人能提出一个好办法吗?一个简单的解决方案可能是创建模块范围的redis连接池或函数范围的redis连接池,但我关心的是不同进程之间如何共享python模块/或python函数。如果为每个进程创建一个单独的对象副本,那么它是否超出了连接池的用途 您不应该(也可能不能)在进程之间共享连接池。只需使用每个进程池,将每个进程中的连接数限制在最小值即可。@Not_a_Golfer嗯,这是我目前所做的。但对这个解决方案并不太满意。如果进程的寿命很短(在我的例子中就是这样),并且是定期创建和销毁的,那么我猜创建到redis实例的每个连接的费用加起来相当可观。因此,重构代码,使进程在一个进程池和一个队列中能够长期存在