Python processing学习

原文地址:http://blog.csdn.net/imzoer/article/details/8701116

The processing.Process class follows the API of threading.Thread.

上面是python doc的原话。

安装processing模块的时候遇到找不到python.h这个文件的问题。

网上搜了很多资料。都说是缺少python-dev。但是使用apt-get却一直提示缺少Python.h。我是这样解决的:

1、安装aptiude

2、使用aptitude安装python-dev

3、easy_install安装processing模块。

------------------------------------------------------

下面使用proessing来做一些例子。 

[python] view plaincopy
  1. from processing import Process,Queue  
  2. import time  
  3.   
  4. def f(q):  
  5.     x=q.get()  
  6.     print "Process number %s,sleeps for %s seconds." % (x,x)  
  7.     time.sleep(x)  
  8.     print "Process number %s finished!" % x  
  9.   
  10. q=Queue()  
  11. for i in range(10):  
  12.     q.put(i)  
  13.     i=Process(target=f,args=[q])  
  14.     i.start()  
  15.   
  16. print "main process joins on queue"  
  17. i.join()  
  18. print "main finished!"  

上面的代码中, 开启十个进程,每个进程休眠相应的时间然后退出。请注意其中的i.join()的用法。

Process中join函数和Queue中的join函数是一样的【Queue的join参考这里】。都是等待运行结束。

至于这里使用i.join(),意思是说,当运行到i.join()这句话的时候,i已经是最后开启的那个进程了。也就是休眠时间最久的那个进程。当它结束了,其他比它start早的进程早都结束了。所以当最后的这个进程结束的时候,主进程也可以结束了。

其实这里最好使用循环,然每一个进程都join一下。

-----------------------------------------------

还有一个需要注意的地方:刚刚用的是processing中的Queue。

processing模块中的Queue和Queue模块中的Queue有什么区别呢?

先看下Queue模块中的Queue:

[python] view plaincopy
  1. Help on module Queue:  
  2.   
  3. NAME  
  4.     Queue - A multi-producer, multi-consumer queue.  

从doc可以看出来,Queue模块中的Queue是多线程安全的。需要使用task_done来标识一个Queue内元素处理完毕。

再看processing中的Queue:

[python] view plaincopy
  1. Help on function Queue in module processing:  
  2.   
  3. Queue(maxsize=0)  
  4.     Returns a queue object implemented using a pipe  
  5. (END)  

processing中的Queue是通过pipe实现的队列。pipe?怎么回事呢?【待续】


原文地址:https://www.cnblogs.com/v-BigdoG-v/p/7398581.html