Python——简简单单多线程

Python——简简单单多线程

第一:Python的标准库提供了两个模块:_thread和threading,_thread是低级模块,threading是高级模块,一般使用threading高级模块。

代码:

import time, threading

# 新线程执行的代码:

def loop():

print('thread %s is running...' % threading.current_thread().name)

n = 0

while n < 5:

n = n + 1

print('thread %s >>> %s' % (threading.current_thread().name, n))

time.sleep(1)

print('thread %s ended.' % threading.current_thread().name)

print('thread %s is running...' % threading.current_thread().name)

t = threading.Thread(target=loop, name='LoopThread')

t.start()

t.join()

print('thread %s ended.' % threading.current_thread().name)

结果:

thread MainThread is running...

thread LoopThread is running...

thread LoopThread >>> 1

thread LoopThread >>> 2

thread LoopThread >>> 3

thread LoopThread >>> 4

thread LoopThread >>> 5

thread LoopThread ended.

thread MainThread ended.

第二:Lock

多线程中,所有变量都由所有线程共享,所以,任何一个变量都可以被任何一个线程修改,因此,线程之间共享数据最大的危险在于多个线程同时改一个变量,所以要使用lock加锁

import time, threading

# 假定这是你的银行存款:

balance = 0

def change_it(n):

# 先存后取,结果应该为0:

global balance

balance = balance + n

balance = balance - n

balance = 0

lock = threading.Lock()

def run_thread(n):

for i in range(100000):

# 先要获取锁:

lock.acquire()

try:

# 放心地改吧:

change_it(n)

finally:

# 改完了一定要释放锁:

lock.release()

t1 = threading.Thread(target=run_thread, args=(5,))

t2 = threading.Thread(target=run_thread, args=(8,))

t1.start()

t2.start()

t1.join()

t2.join()

print(balance)

展开阅读全文

页面更新:2024-04-29

标签:假定   线程   低级   心地   变量   加锁   模块   危险   两个   高级   代码   标准   数据   数码

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top