Python 连续运行的线程

Python 连续运行的线程,python,multithreading,Python,Multithreading,我正在为我的实验室里的实验设计一个视觉刺激。当用户按下一个键时,刺激应该停止。整个实验对时间非常敏感,因此我无法连续运行密钥检查 我写的代码是这样的 这段代码在我连续运行时起作用,这使我相信我的显示脚本是正确的。但是,当我以这种形式运行代码时,这两个线程不是并行运行的线程1执行,然后线程2运行。在thread1运行期间,刺激不会显示。在初始化/调用类的过程中,我是否犯了错误?虽然我不能肯定地回答您的问题(因为我没有看到完整的示例,因此不知道为什么事情似乎是连续执行的),但将复制到您的问题

我正在为我的实验室里的实验设计一个视觉刺激。当用户按下一个键时,刺激应该停止。整个实验对时间非常敏感,因此我无法连续运行密钥检查

我写的代码是这样的






这段代码在我连续运行时起作用,这使我相信我的显示脚本是正确的。但是,当我以这种形式运行代码时,这两个线程不是并行运行的<代码>线程1执行,然后
线程2
运行。在
thread1
运行期间,刺激不会显示。在初始化/调用类的过程中,我是否犯了错误?

虽然我不能肯定地回答您的问题(因为我没有看到完整的示例,因此不知道为什么事情似乎是连续执行的),但将复制到您的问题中的代码中的错误放在一边,你试图做的基本上是正确的。如果您将threading.Thread子类化并提供run()定义,并且如果您通过start()启动每个线程实例,则线程应该并行运行。(线程1可能会有一个小的开头,因为它首先从父线程开始,但我猜在这种情况下这并不重要。)

下面是一个工作示例,它显示了线程应该并行工作的位置:

import sys
import threading

# Using sys.stdout.write() instead of print; it seems nicer for
# demoing threads in CPython :)

class Fizz(threading.Thread):
    def run(self):
        for i in xrange(10):
            sys.stdout.write("fizz\n")

class Buzz(threading.Thread):
    def run(self):
        for i in xrange(10):
            sys.stdout.write("buzz\n")

fizz = Fizz()
buzz = Buzz()
fizz.start()
buzz.start()
以下是我的输出结果:

C:\Users\Vultaire>test.py
fizz
fizz
fizz
fizz
fizz
buzz
buzz
buzz
buzz
fizz
buzz
fizz
fizz
buzz
fizz
fizz
buzz
buzz
buzz
buzz

示例中的线程似乎是以这种方式启动的,因此它们应该并行运行。我猜问题出在别的地方了?或者线程是并行运行的,只是看起来不一样?(如果需要进一步帮助,请提供更完整的代码示例!:)

Python中的多线程有点难以实现。你应该看看这个

,可能它是并行工作的,但是第二个线程开始的时间,然后第一个线程终止的时间。您可以尝试在函数中添加睡眠时间,以模拟IO的慢度,如本例所示

import threading
from time import sleep

def something():
    for i in xrange(10):
        sleep(0.01)
        print "Hello"

def my_thing():
    for i in xrange(10):
        sleep(0.01)
        print "world"   

threading.Thread(target=something).start()
threading.Thread(target=my_thing).start()

不幸的是错误是。。。提供一个简短的、自成一体的“正确”示例,这将有助于实现这一目标;“正确”意味着我们可以自己运行代码,并查看您看到的行为。经常做这个练习是你自己解决问题的一个好方法,因为你学会了把问题缩小到最小的东西,而这个最小的东西仍然会重现问题,从那里开始,实际解决问题往往是一小步。(参考:)仅链接的答案不是答案。请至少从链接中复制一份内容摘要,否则当链接中断时,您的答案将完全无效。非常感谢您的善意建议@Bakuriu。
import sys
import threading

# Using sys.stdout.write() instead of print; it seems nicer for
# demoing threads in CPython :)

class Fizz(threading.Thread):
    def run(self):
        for i in xrange(10):
            sys.stdout.write("fizz\n")

class Buzz(threading.Thread):
    def run(self):
        for i in xrange(10):
            sys.stdout.write("buzz\n")

fizz = Fizz()
buzz = Buzz()
fizz.start()
buzz.start()
C:\Users\Vultaire>test.py
fizz
fizz
fizz
fizz
fizz
buzz
buzz
buzz
buzz
fizz
buzz
fizz
fizz
buzz
fizz
fizz
buzz
buzz
buzz
buzz
import threading
from time import sleep

def something():
    for i in xrange(10):
        sleep(0.01)
        print "Hello"

def my_thing():
    for i in xrange(10):
        sleep(0.01)
        print "world"   

threading.Thread(target=something).start()
threading.Thread(target=my_thing).start()