将 print 语句添加到线程中的循环中,使其更快 运行
Adding a print statement to a loop working in a thread making it run faster
我有这个线程。当我在 while
循环中添加 print
语句时,它运行得更快。否则很慢。
class PubSub(QRunnable):
def __init__(self):
QRunnable.__init__(self)
def run(self):
while True:
message["substep"] = "xyz"
message["timestamp"] = str(datetime.now().replace(microsecond=0))
if message["substep"] == "skip":
continue
messageJson = json.dumps(message)
myAWSIoTMQTTClient.publish(topic, messageJson, 1)
time.sleep(1)
mqtt_worker = PubSub()
mqtt_pool = QThreadPool().globalInstance()
mqtt_pool.start(mqtt_worker)
为什么会这样,如何解决?
编辑:
如果我用 pass
替换 continue
,它会使其他线程 运行 变胖。我不知道为什么会这样,我也不想 pass
我通过更改 time.sleep
的顺序解决了这个问题。问题是,由于 message["substep"]= "skip"
大多数时间,因此 time.sleep
不会执行,线程也没有机会 sleep
。因此它会保持 运行ning 非常快,而不会让其他线程喘口气。
class PubSub(QRunnable):
def __init__(self):
QRunnable.__init__(self)
def run(self):
while True:
message["substep"] = "xyz"
message["timestamp"] = str(datetime.now().replace(microsecond=0))
time.sleep(1)
if message["substep"] == "skip":
continue
messageJson = json.dumps(message)
myAWSIoTMQTTClient.publish(self.topic, messageJson, 1)
print
语句之前会帮助其他线程运行 更快的原因是因为 I/O 操作很慢,因此会暂时阻塞当前线程并允许其他线程线程继续他们的工作。
我有这个线程。当我在 while
循环中添加 print
语句时,它运行得更快。否则很慢。
class PubSub(QRunnable):
def __init__(self):
QRunnable.__init__(self)
def run(self):
while True:
message["substep"] = "xyz"
message["timestamp"] = str(datetime.now().replace(microsecond=0))
if message["substep"] == "skip":
continue
messageJson = json.dumps(message)
myAWSIoTMQTTClient.publish(topic, messageJson, 1)
time.sleep(1)
mqtt_worker = PubSub()
mqtt_pool = QThreadPool().globalInstance()
mqtt_pool.start(mqtt_worker)
为什么会这样,如何解决?
编辑:
如果我用 pass
替换 continue
,它会使其他线程 运行 变胖。我不知道为什么会这样,我也不想 pass
我通过更改 time.sleep
的顺序解决了这个问题。问题是,由于 message["substep"]= "skip"
大多数时间,因此 time.sleep
不会执行,线程也没有机会 sleep
。因此它会保持 运行ning 非常快,而不会让其他线程喘口气。
class PubSub(QRunnable):
def __init__(self):
QRunnable.__init__(self)
def run(self):
while True:
message["substep"] = "xyz"
message["timestamp"] = str(datetime.now().replace(microsecond=0))
time.sleep(1)
if message["substep"] == "skip":
continue
messageJson = json.dumps(message)
myAWSIoTMQTTClient.publish(self.topic, messageJson, 1)
print
语句之前会帮助其他线程运行 更快的原因是因为 I/O 操作很慢,因此会暂时阻塞当前线程并允许其他线程线程继续他们的工作。