Python多线程

Posted by Csming on 2017-04-25

我们把变量从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling


多线程

进程由多干线程组成;一个进程至少有一个线程;

线程是操作系统直接支持的执行单元;

Python提供了_thread和threading模块支持多线程;
_thread是低级模块;threading是高级模块


一般启动一个线程,就是将一个函数传入并创建Thread实例;然后通过调用start()开始执行;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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 is running...' % 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)

任何进程都会默认启动一个线程,称为主线程:MainThread;

Python的threading有一个模块叫做current_thread()函数,返回当前线程的实例;


Lock

多进程中,同一个变量,各自有一份拷贝存在于每个进程中,互不影响,而多线程中,所有变量都由所有线程共享

所以,任何一个变量都可能被任何一个线程所修改;

故,可以利用lock将资源锁定;

即:生命一个变量lock = threading.Lock();

然后在操作数据前,调用lock.acquire()获得锁,然后操作结束后调用lock.release()释放锁;



案例来自廖雪峰前辈的博客:http://www.liaoxuefeng.com/
参考资料:http://www.liaoxuefeng.com/