相关疑难解决方法(0)

发电机是否有线程?

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

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

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

python multithreading generator thread-safety

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

Python:为什么不同的线程从一个生成器获得自己的一系列值?

我正在学习Python中的多线程.我想知道如何使用生成器向多个线程提供数据.这是我写的:

  import threading

  data = [i for i in xrange(100)]

  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 generator():
              print '{0} {1}'.format(self.name, i)

  a = CountThread('a')
  b = CountThread('b')
  a.start()
  b.start()
Run Code Online (Sandbox Code Playgroud)

我以为列表只会被迭代一次.但似乎每个线程都是独立地通过列表进行交互.

输出:

a 0
a 1
a 2
b 0
a 3
a 4
b 1
b 2
a 5
a 6
a 7
a 8
a 9
b 3
b 4
b 5
b …
Run Code Online (Sandbox Code Playgroud)

python multithreading generator

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

标签 统计

generator ×2

multithreading ×2

python ×2

thread-safety ×1