Python:具有2个函数的多处理池

时间:2018-05-17 13:56:19

标签: python websocket multiprocessing pool

我对multiprocessing.Pool()有疑问 我的脚本连接到websocket以获取大量数据。该数据存储在列表中。我的函数formula()根据不同的期望场景进行计算,并在场景返回True时执行 在下面我发布了一个简化的代码:

import multiprocessing, time, json

res_array = []

def process_message(msg):
   res_array.insert(0, msg)
   if len(res_array) > specificnumber:
            del res_array[specificnumber:]
            #inserts data in a list

def formula(res_array1):
    # handles list

def initiate():
    ma = SocketManager(client)
    conn_key = ma.start_multiplex_socket(listofsockets, process_message)
    ma.start()
    # starts websocket

if __name__ == '__main__':
    p1 = multiprocessing.Process(name='p1', target=initiate())
    p2 = multiprocessing.Process(name='p2', target=formula(res_array))
    p1.start()
    p2.start()

如您所见,我必须调用initiate()来启动websocket。 我的计划是在公式同时运行时从websocket获取数据。

此代码完美但效果缓慢。为了解决问题,我想尝试multiprocessing.Pool(),但我找到的每个例子都只显示了一个函数。

问题:
如何为一个池分配2个功能?池应该同时处理initiate()formula()函数,cpu_count()作为进程数。
那可能吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

您可以为initiateformula编写包装函数:

def intiate_formulate(res_array1):
    initiate()
    formula(res_array1)

并使用该功能