Dec 27, 2010

thread in python

很简单
参见 programming python

由于 Global Interpreter Lock,python的线程并不能真正同时运行(在多核或多CPU机器上)。如果要并行,要使用multiprocess

python.start_new_thread(...)

互斥
mutex = thread.allocate_lock( )
mutex.acquire( )
mutex.release( )

等待子线程结束(python没有 boost thread 的 join)
可以采用互斥,查询互斥的状态,或更简单的数组,查询数组
配合 time.sleep(如果主进程不sleep,则一直查询)
如果不等待子进程结束,主进程会提前结束,但是子进程还可以继续运行

注意子进程和父进程共享 global scope

资源的线程安全
1. 采用互斥
2. 如果是 producer-consumer 的模式(某些进程产生资源,某些进程消费资源),采用 Queue,不用显式调用互斥。Queue 已经被设计为线程安全的,内部采用互斥。

0 comments: