- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 https://code.google.com/p/pyloadtools/wiki/CodeTutorialMultiThreading 找到了这个简单的代码
import _thread
def hello(num):
print('hello from thread %s\n' % num)
_thread.start_new_thread(hello, (0,))
_thread.start_new_thread(hello, (1,))
_thread.start_new_thread(hello, (2,))
但是当我运行它时,它可以在 IDLE 上运行,但不能在使用 PyDev 的 eclipse 上运行。知道如何修复它吗?
注意:我认为主程序在线程运行之前终止。我猜线程没有足够的时间来运行。我如何解决它?也许我应该使用 join?
最佳答案
引用 _thread
的 Caveats
部分文档,
When the main thread exits, it is system defined whether the other threads survive. On most systems, they are killed without executing
try ... finally
clauses or executing object destructors.When the main thread exits, it does not do any of its usual cleanup (except that
try ... finally
clauses are honored), and the standard I/O files are not flushed.
这里有两种可能性。
主线程启动三个线程,但在线程完成执行之前退出。因此,标准 I/O 文件不会刷新,as they are buffered, by default .
或者,主线程终止,并且根据引用的第一个要点,所有子线程都在操作中被终止。
无论哪种方式,您都需要确保主线程不会在子线程完成之前终止。
但是当您从 IDLE 运行时,主线程仍然存在,因此,当线程实际完成时,I/O 缓冲区将被刷新。这就是为什么它在 IDLE 中有效但在 Eclipse 中无效。
<小时/>要确保主线程仅在所有线程完成后退出,可以使其等待子线程
Semaphore
您可以使用信号量
,如下所示
import _thread
import threading
def hello(num):
print('hello from thread %s' % num)
# Release semaphore when the thread is actually done
sem.release()
def create_thread(value):
# Acquire semaphore when the thread is actually created
sem.acquire()
_thread.start_new_thread(hello, (value,))
# Counting semaphore. Maximum three threads can acquire.
# Next acquire call has to wait till somebody releases
sem = threading.Semaphore(3)
for i in range(3):
create_thread(i)
# We are capturing the semaphore three times again, because
# whenever a thread completes it releases it. So, only when we
# acquire it thrice to make sure that all threads have completed.
for i in range(3):
sem.acquire()
Lock Objects
或者,您可以使用 _thread.lock
对象,如下所示
import _thread
locks = []
def hello(num, lockobject):
print('hello from thread %s' % num)
# Release the lock as we are done here
lockobject.release()
def create_thread(value):
# Create a lock and acquire it
a_lock = _thread.allocate_lock()
a_lock.acquire()
# Store it in the global locks list
locks.append(a_lock)
# Pass it to the newly created thread which can release the lock once done
_thread.start_new_thread(hello, (value, a_lock))
for i in range(3):
create_thread(i)
# Acquire all the locks, which means all the threads have released the locks
all(lock.acquire() for lock in locks)
现在您将看到程序始终打印 hello from
消息。
注意:正如文档所述,_thread
是一个低级线程 API
。因此,最好使用更高级别的模块,如 threading
,您可以简单地等待所有线程退出 join
方法。
关于python - 为什么使用 `_thread.start_new_thread` 创建的线程不打印任何内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29740478/
我在 https://code.google.com/p/pyloadtools/wiki/CodeTutorialMultiThreading 找到了这个简单的代码 import _thread d
我尝试从终端启动 webapp2 开发服务器,但收到此错误 > File "/Users/mertbarutcuoglu/Desktop/hellowebapp2/main.py", line 12,
从 ubuntu 10.04 开始,我使用 easy_install 安装了 pylab。升级后,我可以导入 pylab。首先,我运行从 easy_install 安装的 ipython: $ ipy
我正在尝试解析包含汽车属性(154 种属性)的网站。我有一个巨大的列表(名称是 liste_test),其中包含 280.000 个二手车公告 URL。 def araba_cekici(liste_
在此处检查 Stackoverflow 上的所有现有答案后:Checkpointing keras model: TypeError: can't pickle _thread.lock object
这是我的代码 class MusicHandler(object): """ Implements the logic to download musics """ def __ini
致所有尝试开始使用 docker-compose 的好伙伴。我正在运行 OS X El Capitan (10.11)。 系统附带 python 2.7。不建议尝试将系统 python 替换为 pyt
我读过《Core Python Applications Planning》,其中编写了这段代码。 import _thread from time import sleep, ctime loops
阅读了一些类似的问题,其中大多数提到你不应该尝试序列化一个不可序列化的对象。我无法理解这个问题。我可以将模型保存为 .h5 文件,但这并不能达到我想要做的目的。请帮忙! def image_g
我正在使用带有 flask 的 RQ 来循环排队作业。我有以下代码: from rq import Queue from rq.job import Job from worker import co
尝试使用共享队列同时运行两个不同的函数并出现错误...如何使用共享队列同时运行两个函数?这是 Windows 7 上的 Python 3.6 版。 from multiprocessing impor
from keras.layers import Embedding, Dense, Input, Dropout, Reshape from keras.layers.convolutional i
我尝试使用 Cassandra 和 multiprocessing 根据中的示例同时插入行(虚拟数据) http://www.datastax.com/dev/blog/datastax-python
我在 np.save 上收到此错误。请让我知道原因以及如何解决这个问题。下面是我的代码: import cv2 import numpy as np import os from random imp
我正在使用 Keras 创建 ANN 并在网络上进行网格搜索。运行以下代码时遇到以下错误: model = KerasClassifier(build_fn=create_model(input_di
我正在使用来自(事实上的标准)的 Redis 客户端 python 实现:https://pypi.org/project/redis/ 所以我在后台定义了多个worker,每个worker都有一个在
过去似乎在不同的上下文中发生了错误 here ,但我没有直接转储模型——我正在使用 ModelCheckpoint 回调。知道可能出了什么问题吗? 信息: Keras 2.0.8 版 Tensorfl
我遇到了 pydantic.BaseSettings 的问题和 prometheus_client.Summary . 下面的代码片段在尝试执行时抛出异常: from prometheus_clien
在运行 Python 3.6 的 Windows 10 系统上,尝试使用 multiprocessing.Process 时创建一个新的rq worker , multiprocessing.Proc
我使用的是python 3.6 我正在尝试从下面显示的名称 SubmitJobsUsingMultiProcessing() 的类方法内部使用多重处理,该方法进一步依次调用另一个类方法。 我不断遇到此
我是一名优秀的程序员,十分优秀!