BuZ*_*uZz 7 python multithreading
我有一个运行的Web服务器Python.服务器是私有的,所以我只希望大约20个用户连接到它.服务器是多线程的(目前有8个核心,因此我猜测了8个线程).
当请求进入时,我能够识别用户.在一些查询中,我需要更新一个简单dictionary的用户名 - >布尔形式 .我怎么能让这一个线程安全?
And*_*son 10
您需要创建一个全局锁定对象.
lock = threading.Lock()
Run Code Online (Sandbox Code Playgroud)
然后围绕每个字典访问获取并释放锁.最简单的方法是使用新的(ish)with语法.
with lock:
dict[key] = value
Run Code Online (Sandbox Code Playgroud)
如果你需要一个锁(以避免Joonas描述的竞争条件),并且仍然坚持使用Python 2.4,
import threading
lock = threading.Lock()
shared_dict = {}
def do_thing(user, value):
lock.acquire()
try:
shared_dict[user] = value
finally:
# Always called, even if exception is raised in try block
lock.release()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14032 次 |
| 最近记录: |