python多线程变量交互示例
时间: 2024-10-17 12:15:31 浏览: 24
python 条件同步的使用 条件同步:threading.Condition 多线程同步,python2例程
在Python中,由于全局解释器锁(GIL)的存在,多线程并不能直接共享数据并改变它的值,因为GIL在同一时刻只允许一个线程执行Python字节码。但我们可以使用进程间的通信机制,如`multiprocessing`模块下的`Queue`、`Pipe`等,或者通过锁(如`threading.Lock()`)来进行变量的同步访问。
下面是一个简单的使用`Lock`控制变量的例子:
```python
import threading
# 共享变量
shared_var = 0
lock = threading.Lock()
def increment_counter():
global shared_var
with lock:
local_copy = shared_var
# 修改本地副本
local_copy += 1
print(f"Thread {threading.current_thread().name} incremented the counter to {local_copy}")
# 更新全局变量
shared_var = local_copy
threads = [threading.Thread(target=increment_counter) for _ in range(5)]
for thread in threads:
thread.start()
for thread in threads:
thread.join()
print(f"Final shared value: {shared_var}")
```
在这个例子中,我们创建了一个锁`lock`,然后在`increment_counter`函数内部,当获取到锁后,线程可以安全地更新局部变量(`local_copy`),再将这个修改后的值赋给全局变量`shared_var`。这样做虽然解决了并发修改的问题,但是效率较低,因为每次都需要获取和释放锁。
阅读全文