如果执行得太快,Python线程会受到影响

时间:2015-06-11 02:47:56

标签: python multithreading queue

我有许多线程可以并行执行,因为线程通常是这样做的:D

除非我放慢速度,否则他们会互相傀儡,写信给彼此的空间。因此,当我打印一个声明时,我看到的似乎是一个" echo" (在某些线程中不是编码术语,而是文字回声)。

当我放慢速度时,不会发生傀儡。

以下是这些虚拟账户运行时我在终端上获得的一个例子:

Meikitotokiku83: day_2, Wed Jun 10 03:32:53 2015, nine
Robinia6424: day_2, Wed Jun 10 03:32:53 2015, four
Meikitotokiku83: day_7, Wed Jun 10 03:32:53 2015, fifteen
Meikitotokiku83: day_7, Wed Jun 10 03:32:53 2015, thirteen
Mekushishifu643: day_7, Wed Jun 10 03:32:53 2015, two
Meikitotokiku83: day_7, Wed Jun 10 03:32:53 2015, eleven
Meikitotokiku83: day_2, Wed Jun 10 03:32:53 2015, six
Mekushishifu643: day_2, Wed Jun 10 03:32:53 2015, three
**Meikitotokiku83: day_7, Wed Jun 10 03:32:53 2015, ten 
Meikitotokiku83: day_7, Wed Jun 10 16:33:03 2015, ten 
 Meikitotokiku83: day_7, Wed Jun 10 16:33:03 2015, ten 
Meikitotokiku83: day_7, Wed Jun 10 16:33:03 2015, ten** 
Meikitotokiku83: day_2, Wed Jun 10 03:32:53 2015, fourteen
Meikitotokiku83: day_7, Wed Jun 10 03:32:53 2015, sixteen
DaDaFurstig6304: day_7, Wed Jun 10 03:32:53 2015, five
DoraDiggle5529: day_7, Wed Jun 10 03:32:53 2015, one
Meikitotokiku83: day_2, Wed Jun 10 03:32:53 2015, seven

注意标记为' ten'的回声。

我真的希望我不必发布我的代码,因为大多数python程序员可能会认识到我没有在这个线程问题中没有我在这里发布的300行类。

课程相当大,所以我不打算在这里发帖。我怀疑这是一个我不认识的常见问题,比如处理器问题?

这是什么原因,如何在不使用时间延迟的情况下规避它?

2 个答案:

答案 0 :(得分:3)

这些线程是否访问共享数据 - 即相同的变量或变量?如果是这样,并且如果数据不受锁/同步的保护,则它易受线程race conditions的影响。在任何并发编程环境中都是如此,而不仅仅是Python。 Check out this nice summary of Python synchronization

答案 1 :(得分:1)

这是标准的线程行为。不要使用具有共享输出的线程。 Python的线程是原子的:这意味着如果你给他们一个孤立的环境,他们就不会给你带来麻烦。如果你让他们访问动态修改的共享数据,或者写入共享对象或缓冲区,那么你会遇到这样的问题。

问题是您使用线程不正确。写入每个线程内的单独缓冲区,并在线程完成后,然后合并结果。