草庐IT

thread-synchronization

全部标签

Python threading.Event() - 确保所有等待的线程在 event.set() 上唤醒

我有许多线程等待一个事件,执行一些操作,然后再次等待该事件。另一个线程将在适当的时候触发该事件。我想不出一种方法来确保每个等待线程在设置事件时恰好触发一次。我目前设置了触发线程,睡了一会儿,然后清除它。不幸的是,这会导致等待线程多次获取set事件,或者根本没有。我不能简单地让触发线程生成响应线程来运行它们一次,因为它们是对来自其他地方的请求的响应。简而言之:在Python中,我怎样才能让一个线程设置一个事件并确保每个等待线程在事件被清除之前恰好对事件执行一次?更新:我试过使用锁和队列来设置它,但它不起作用。这是我拥有的:#Globals-usedtosynchthreadswaitin

python - 郁金香/异步IO : why not all calls be async and specify when things should be synchronous?

当Guidotalked时我去了SFPython聚会关于Tulip,Python中用于异步操作的futureasyncIO库。要点是,如果你想异步运行某些东西,你可以使用"yieldfrom"+expression和几个装饰器来指定对之后的调用yieldfrom应该异步执行。它的好处是您可以正常读取该函数中的语句(就好像它是同步的)并且它的行为就好像它在该函数的执行方面是同步的(返回值和错误/异常传播和处理).我的问题是:为什么不采用相反的行为,即默认情况下所有函数调用都是异步的(并且没有yieldfrom)并且在您想要执行某些操作时使用不同的显式语法同步?(除了需要另一个关键字/语法

python - Flask APP - ValueError : signal only works in main thread

我尝试创建一个简单的flask应用程序:fromflaskimportFlaskapp=Flask(__name__)if__name__=='__main__':app.run()但是当我添加调试时:FLASK_APP=run.pyFLASK_ENV=developmentFLASK_DEBUG=1我收到以下错误:ValueError:signalonlyworksinmainthread这里是完整的堆栈跟踪FLASK_APP=run.pyFLASK_ENV=developmentFLASK_DEBUG=1Infolderc:/MyProjectPath/apic:\MyProjec

python - 查询Python的threading.Lock是否加锁

我有一个正在运行的线程(下面的代码)启动了一个阻塞子进程。为了确保其他线程不会启动相同的子进程,我在这个subprocess.call调用周围设置了一个锁。我还希望能够终止此子进程调用,因此我有一个从其他地方调用的停止函数。如果子进程过早停止,我也想释放锁,这就是下面的代码所做的:classSomeThread(threading.Thread):defrun(self):aLock.acquire()self.clip=subprocess.call(['mplayer','Avatar.h264'],stdin=subprocess.PIPE)aLock.release()defs

python - 有没有理由在 multiprocessing.Lock 上使用 threading.Lock?

如果软件项目支持已向后移植多处理的Python版本,是否有任何理由使用threading.Lock而不是multiprocessing.Lock?multiprocessing锁也不是线程安全的吗?就此而言,是否有理由使用threading中也在multiprocessing中的任何同步原语? 最佳答案 threading模块的同步原语比multiprocessing更轻更快,因为没有处理共享信号量等问题。如果您使用线程;使用线程的锁。进程应该使用多进程的锁。 关于python-有没有理

python - 使用 thread.start_new_thread() 在 Python 2.6 中进行简单线程处理

我正在学习有关简单线程的教程。他们给出了这个例子,当我尝试使用它时,我从解释器那里得到了无法理解的错误。你能告诉我为什么这不起作用吗?我在WinXPSP3w/Python2.6currentimportthreaddefmyfunction(mystring,*args):printmystringif__name__=='__main__':try:thread.start_new_thread(myfunction,('MyStringHere',1))exceptExceptionaserrtxt:printerrtxt执行此结果::启动的线程中出现未处理的异常sys.excep

python - 将 mkl_set_num_threads 与 numpy 一起使用

我正尝试像这样使用mkl_set_num_threads设置numpy计算的线程数importnumpyimportctypesmkl_rt=ctypes.CDLL('libmkl_rt.so')mkl_rt.mkl_set_num_threads(4)但我一直遇到段错误:ProgramreceivedsignalSIGSEGV,Segmentationfault.0x00002aaab34d7561inmkl_set_num_threads__()from/../libmkl_intel_lp64.so获取线程数没问题:printmkl_rt.mkl_get_max_threads(

python - Flask 中的 Thread Local Objects 是什么意思?

我正在阅读Flask文档(特别是ForewordforExperiencedProgrammerschapter)并且我阅读了这个-OneofthedesigndecisionsinFlaskwasthatsimpletasksshouldbesimple;theyshouldnottakealotofcodeandyettheyshouldnotlimityou.Becauseofthat,Flaskhasfewdesignchoicesthatsomepeoplemightfindsurprisingorunorthodox.Forexample,Flaskusesthread-l

python - Matplotlib - Tcl_AsyncDelete : async handler deleted by the wrong thread?

我问这个问题是因为我无法解决Python/Django中的一个问题(实际上在纯Python中没问题)导致RuntimeError:tcl_asyncdeleteasynchandlerdeletedbythe线程错误。这在某种程度上与我在Django中呈现matplotlib图的方式有关。我的做法是:...importmatplotlib.pyplotasplt...fig=plt.figure()...plt.close()我极力简化了我的代码。但问题是——即使我只有一行代码:fig=plt.figure()我看到这个RuntimeError发生了。我希望我能解决这个问题,如果我知道

python - 为什么 super(Thread, self).__init__() 不能用于 threading.Thread 子类?

我所知道的Python中的每个对象都可以通过调用来处理其基类初始化:super(BaseClass,self).__init__()threading.Thread的子类似乎不是这种情况,因为如果我在SubClass.__init__()中尝试这个,我得到:RuntimeError:thread.__init__()notcalled是什么导致了这个错误?我查看了threading.Thread的源代码,看起来__init__方法应该设置Thread.__initialized=True。我看到所有示例都使用以下__init__:classYourThread(threading.Th