相关疑难解决方法(0)

发电机是否有线程?

我有一个多线程程序,我创建一个生成器函数,然后将其传递给新线程.我希望它在本质上是共享/全局的,因此每个线程都可以从生成器获取下一个值.

使用这样的生成器是安全的,还是会遇到从多个线程访问共享生成器的问题/条件?

如果没有,是否有更好的方法来解决问题?我需要一些循环遍历列表的东西,并为任何线程调用它生成下一个值.

python multithreading generator thread-safety

42
推荐指数
3
解决办法
1万
查看次数

多线程:为什么生成器不是线程安全的?当它在线程之间共享时会发生什么?

我正在阅读这个问题该问题询问生成器是否是线程安全的,一个答案说:

它不是线程安全的;同时调用可能会交错,并与局部变量混淆。

另一个答案表明您可以使用锁来确保一次只有一个线程使用生成器。

我是多线程的新手。谁能设计一个例子来说明当你使用没有锁的生成器时到底会发生什么?

例如,如果我这样做,它似乎没有任何问题:

import threading

def generator():
    for i in data:
        yield i

class CountThread(threading.Thread):
    def __init__(self, name):
        threading.Thread.__init__(self)
        self.name = name

    def run(self):
        for i in gen():
            print '{0} {1}'.format(self.name, i)

data = [i for i in xrange(100)]
gen = generator()
a = CountThread('a')
b = CountThread('b')
a.start()
b.start()
Run Code Online (Sandbox Code Playgroud)

python multithreading generator

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

标签 统计

generator ×2

multithreading ×2

python ×2

thread-safety ×1