d********t 发帖数: 9628 | 1 可不可以定义一个dictionary,用一个process来update,另一个process用这个不断被
更新的dictionary? |
c*****m 发帖数: 1160 | 2 multi-thread is better. "process"? you have to try. |
d********t 发帖数: 9628 | 3 Thanks!
【在 c*****m 的大作中提到】 : multi-thread is better. "process"? you have to try.
|
j******g 发帖数: 1098 | 4 python的threading lib有GIL的限制,所有的thread都只能跑在一个cpu core上。如果
你想要不同的task跑在不同的core上,应该用multiprocessing。
【在 d********t 的大作中提到】 : 可不可以定义一个dictionary,用一个process来update,另一个process用这个不断被 : 更新的dictionary?
|
d********t 发帖数: 9628 | 5 谢了。那么假如我想一个process更新data,一个process不停run data该怎么办?
试了multiprocessing发现互不相干。
【在 j******g 的大作中提到】 : python的threading lib有GIL的限制,所有的thread都只能跑在一个cpu core上。如果 : 你想要不同的task跑在不同的core上,应该用multiprocessing。
|
p*****2 发帖数: 21240 | |
m********2 发帖数: 89 | 7 Copied from Python Doc:
from multiprocessing import Process, Manager
def f(d, l):
d[1] = '1'
d['2'] = 2
d[0.25] = None
l.reverse()
if __name__ == '__main__':
with Manager() as manager:
d = manager.dict()
l = manager.list(range(10))
p = Process(target=f, args=(d, l))
p.start()
p.join()
print(d)
print(l)
【在 d********t 的大作中提到】 : 谢了。那么假如我想一个process更新data,一个process不停run data该怎么办? : 试了multiprocessing发现互不相干。
|
d********t 发帖数: 9628 | 8 问题是自己的data是一个object
【在 m********2 的大作中提到】 : Copied from Python Doc: : from multiprocessing import Process, Manager : def f(d, l): : d[1] = '1' : d['2'] = 2 : d[0.25] = None : l.reverse() : if __name__ == '__main__': : with Manager() as manager: : d = manager.dict()
|
n****1 发帖数: 1136 | 9 用python要尽量使用yield, 单线程能搞定的就别多线程/进程. |
d********t 发帖数: 9628 | 10 能详细说一下为何yield能避免多线程吗?
【在 n****1 的大作中提到】 : 用python要尽量使用yield, 单线程能搞定的就别多线程/进程.
|
n****1 发帖数: 1136 | 11 yield/generator就是cooperative multitasking.
python doc里面就有很多例子,非常简单
【在 d********t 的大作中提到】 : 能详细说一下为何yield能避免多线程吗?
|
A*****i 发帖数: 3587 | |
p*****2 发帖数: 21240 | 13
顶。
【在 A*****i 的大作中提到】 : 上event driven : 多线程不好用
|
d*******r 发帖数: 3299 | 14 我琢磨过这个,最后决定上 Node.js 或者 vert.x 算了
【在 n****1 的大作中提到】 : yield/generator就是cooperative multitasking. : python doc里面就有很多例子,非常简单
|