use*_*813 3 python multithreading
我有以下内容:
d = {...} #a dictionary with strings
l1 = [...] #a list with stuff
l2 = [...] #a list with numbers
...
for i in l1:
for key in l2:
#do some stuff
...
if d[key] == i:
print d[key]
Run Code Online (Sandbox Code Playgroud)
我想使用线程(为了提高性能)做同样的事情.我想的是:
import threading
d = {...} #a dictionary with strings
l1 = [...] #a list with stuff
l2 = [...] #a list with numbers
...
def test(i, key):
#do the same stuff
if d[key] == i:
print d[j]
for i in l1:
for key in l2:
threading.start_new_thread(test, (i,key))
Run Code Online (Sandbox Code Playgroud)
我不确定这是最好的方法.我担心的是,我根本没有优化.一些基本想法是:
如果你认为我应该使用另一种语言,如果你能指出它我会很高兴.帮助将是ayciated.提前致谢.
Python中的传统线程(http://docs.python.org/2/library/threading.html)在大多数常见的运行时中受到"全局解释器锁定"(GIL)的限制,它可以防止多个线程同时执行,无论如何你有很多核心或CPU.尽管存在这种限制,但是当线程受I/O限制时,传统线程仍然非常有价值,例如处理网络连接或执行数据库查询,其中大多数情况下它们都在等待外部事件而不是"计算".
如果您的个别进程受CPU限制,例如您的问题所暗示的,那么您将更好地使用较新的"多处理"模块(http://docs.python.org/2/library/multiprocessing.html):
multiprocessing是一个使用类似于线程模块的API支持产生进程的包.多处理包提供本地和远程并发,通过使用子进程而不是线程有效地侧向执行全局解释器锁.因此,多处理模块允许程序员充分利用给定机器上的多个处理器.
| 归档时间: |
|
| 查看次数: |
1898 次 |
| 最近记录: |