Python中关于multiprocess模块的使用问题,新手求教

大家好,

简化下需要添加 multiprocess 的一段代码如下:

def formatter(a_response):
    response = {}
    # 问题 1:我想在这里加一个 pool?
    for index, value in enumerate(value):
    	# value = 对 value 进行一些处理
    	response[index] = value # 这里用 dict 而不是 list 是为了日后读取时更快,O(1) vs O(n)
    return response

def a_http_post(a_string): # a requests.post return r.text

def do_sth(): a_dictionary = pickle.load(my_file) # 问题 2:我想在这里用 multiprocess 的 manager ? for k, v_list in a_dictionary.items(): for v in v_list: response = a_http_post(v) a_dictionary[k] = formatter(response) return a_dictionary

if name == “main”: # … res = do_sth() # …

我想请教下问题 1 和问题 2 里,我 Pool 跟 manager 用的是否正确?或者是整体结构有没有什么不妥需要修改的地方?_(:з」∠)_提前谢谢大佬们~

如果要用 Pool 跟 Manager,我应该必须把 for loop 里面的东西单独拉出来是吗?(:з」∠)


Python中关于multiprocess模块的使用问题,新手求教

7 回复

Σ(⊙▽⊙"a 第一次发帖有点紧张,我先研究下怎么贴代码


我无法理解你的问题

改用 ProcessPoolExecutor 吧,方便好用,这样可以异步,不会瞬间同时请求太多,然后挂了,这是我理解😂

说句题外话,I/O 瓶颈应该用 thread 或者 conroutine 解决哎。

给个建议吧,在 Python 里面想并行化,较为方便的一种做法是把循环改成 map,然后 map 的实现可以用多进程、多线程或者 gevent 里面的 map 实现,这样只需修改一个位置就能用不同的并发模型

_(:з」∠)_谢谢各种建议,已经找男朋友搞定啦。最后只是把 for 循环里的东西拿出来单独弄了个 function,然后用了 pool.map 。

嗯嗯,最后的确用的是这个方法。感谢~

回到顶部