gevent如何保证多个协程之间不共享同一个线程局部变量

Posted

技术标签:

【中文标题】gevent如何保证多个协程之间不共享同一个线程局部变量【英文标题】:How does gevent ensure that the same thread-local variables are not shared between multiple coroutines 【发布时间】:2021-11-07 21:30:05 【问题描述】:

我有一个Python 2 django项目,是从gunicorn开始的,代码里写了很多threading.currentThread().xxxxxx ='some value'

因为协程复用同一个线程,很好奇gevent如何保证协程A(线程1)中创建的currentThread变量不会影响协程B(同线程1强>)。

毕竟代码上的写法是:

import threading
threading.currentThread().xxxxx ='ABCD'

代替

import gevent
gevent.currentCoroutine().xxxxx ='ABCD' (simulate my guess)

感谢您的帮助

【问题讨论】:

【参考方案1】:

据我所知并没有。普通的 Gevent 协程在同一个线程中运行 - 如果您在一个协程中修改该线程上的某些内容,那么它也会在另一个协程中被修改。

如果这是关于 gunicorn 的问题,那就另当别论了,下面的答案对此有一些详细的说明 - https://***.com/a/41696500/7970018。

【讨论】:

以上是关于gevent如何保证多个协程之间不共享同一个线程局部变量的主要内容,如果未能解决你的问题,请参考以下文章

并发编程 - 协程 - 1.协程概念/2.greenlet模块/3.gevent模块/4.gevent实现并发的套接字通信

python2.0_s12_day9_协程&Gevent协程

13.并发编程之协程

Python并发编程(线程队列,协程,Greenlet,Gevent)

getName()--ident--enumerate--activeCount--线程池--协程(gevent)--优先级队列

python 并发编程 协程 gevent模块