我对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()
。
这可能吗? 谢谢!
你可以为initiate
和formula
编写一个包装函数:
def intiate_formulate(res_array1):
initiate()
formula(res_array1)
并使用该函数