小编Eri*_*son的帖子

在某些情况下,Python线程可以安全地操作共享状态吗?

另一个问题中的一些讨论鼓励我更好地理解多线程Python程序中需要锁定的情况.

文章在Python线程,我有当多个线程同时访问共享的状态可能出现的缺陷的几个实体,可测试的例子.此页面上提供的示例竞争条件涉及读取和操作存储在字典中的共享变量的线程之间的竞争.我认为这场比赛的情况非常明显,幸运的是,这是非常值得考验的.

但是,我无法通过列表追加或变量增量等原子操作来唤起竞争条件.这个测试详尽地试图展示这样一个种族:

from threading import Thread, Lock
import operator

def contains_all_ints(l, n):
    l.sort()
    for i in xrange(0, n):
        if l[i] != i:
            return False
    return True

def test(ntests):
    results = []
    threads = []
    def lockless_append(i):
        results.append(i)
    for i in xrange(0, ntests):
        threads.append(Thread(target=lockless_append, args=(i,)))
        threads[i].start()
    for i in xrange(0, ntests):
        threads[i].join()
    if len(results) != ntests or not contains_all_ints(results, ntests):
        return False
    else:
        return True

for i in range(0,100):
    if test(100000):
        print "OK", i
    else:
        print "appending to …
Run Code Online (Sandbox Code Playgroud)

python multithreading gil

5
推荐指数
1
解决办法
2593
查看次数

标签 统计

gil ×1

multithreading ×1

python ×1