天天看點

Python程序/線程/協程相關

<code>os.getpid()</code>

<code>os.getppid()</code>

(1)、程序内局部辨別。

<code>import</code> <code>threading</code>

<code>threading.get_ident()</code>

<code>threading.current_thread().ident</code>

【使用線程池完成阻塞型任務】

<code>#encoding=utf-8</code>

<code>#author: walker</code>

<code>#date: 2017-03-27</code>

<code>#summary: 使用線程池完成阻塞型任務</code>

<code>#Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)] on win32</code>

<code> </code> 

<code>import</code> <code>time</code>

<code>import</code> <code>random</code>

<code>import</code> <code>concurrent.futures</code>

<code>#同步型任務</code>

<code>def</code> <code>TaskSync(taskid, sleepTime):</code>

<code>    </code><code>print</code><code>(</code><code>'thread_%05d %s sleep %d ...'</code> <code>%</code> <code>(threading.get_ident(), taskid, sleepTime))</code>

<code>    </code><code>time.sleep(sleepTime)   </code><code>#睡覺任務</code>

<code>    </code><code>print</code><code>(</code><code>'\t\tthread_%05d %s sleep %d over'</code> <code>%</code> <code>(threading.get_ident(), taskid, sleepTime))</code>

<code>    </code><code>return</code> <code>taskid, sleepTime</code>

<code>    </code> 

<code>#處理所有任務</code>

<code>def</code> <code>ProcAll(taskList):</code>

<code>    </code><code>pool </code><code>=</code> <code>concurrent.futures.ThreadPoolExecutor(</code><code>4</code><code>)  </code>

<code>    </code><code>futureList </code><code>=</code> <code>list</code><code>()</code>

<code>    </code><code>for</code> <code>taskid, sleepTime </code><code>in</code> <code>taskList:  </code><code>#送出所有任務</code>

<code>        </code><code>futureList.append(pool.submit(TaskSync, taskid, sleepTime))</code>

<code>    </code><code>totalSleepTime </code><code>=</code> <code>0</code>

<code>    </code><code>for</code> <code>future </code><code>in</code> <code>concurrent.futures.as_completed(futureList):</code>

<code>        </code><code>task, sleepTime </code><code>=</code> <code>future.result()</code>

<code>        </code><code>print</code><code>(</code><code>'\t\t\t\t\t\t%s sleep %d over'</code> <code>%</code> <code>(task, sleepTime))</code>

<code>        </code><code>totalSleepTime </code><code>+</code><code>=</code> <code>sleepTime</code>

<code>        </code> 

<code>    </code><code>return</code> <code>totalSleepTime</code>

<code>if</code> <code>__name__ </code><code>=</code><code>=</code> <code>'__main__'</code><code>:</code>

<code>    </code><code>startTime </code><code>=</code> <code>time.time()</code>

<code>    </code><code>taskList </code><code>=</code> <code>[(</code><code>'task_%d'</code> <code>%</code> <code>id</code><code>, random.randint(</code><code>1</code><code>, </code><code>5</code><code>)) </code><code>for</code> <code>id</code> <code>in</code> <code>range</code><code>(</code><code>0</code><code>, </code><code>9</code><code>)]</code>

<code>    </code><code>print</code><code>(</code><code>'taskList:%s'</code> <code>%</code> <code>repr</code><code>(taskList))</code>

<code>    </code><code>totalSleepTime </code><code>=</code> <code>ProcAll(taskList)</code>

<code>    </code><code>print</code><code>(</code><code>'totalSleepTime: %d s'</code> <code>%</code> <code>totalSleepTime)</code>

<code>    </code><code>print</code><code>(</code><code>'real cost time:%.2f'</code> <code>%</code> <code>(time.time() </code><code>-</code> <code>startTime))</code>

【使用單線程完成異步型任務】

<code>#summary: 使用單線程完成異步型任務</code>

<code>import</code> <code>asyncio</code>

<code>#協程型任務 </code>

<code>async </code><code>def</code> <code>TaskAsync(taskid, sleepTime):</code>

<code>    </code><code>print</code><code>(</code><code>'%s sleep %d ...'</code> <code>%</code> <code>(taskid, sleepTime))</code>

<code>    </code><code>await asyncio.sleep(sleepTime) </code><code>#睡覺任務</code>

<code>    </code><code>print</code><code>(</code><code>'\t%s sleep %d over'</code> <code>%</code> <code>(taskid, sleepTime))</code>

<code>async </code><code>def</code> <code>ProcAll(taskList):</code>

<code>    </code><code>coroutineList </code><code>=</code> <code>list</code><code>()</code>

<code>    </code><code>for</code> <code>taskid, sleepTime </code><code>in</code> <code>taskList:</code>

<code>        </code><code>coroutineList.append(asyncio.ensure_future((TaskAsync(taskid, sleepTime))))   </code>

<code>    </code><code>for</code> <code>f </code><code>in</code> <code>asyncio.as_completed(coroutineList):</code>

<code>        </code><code>task, sleepTime </code><code>=</code> <code>await f</code>

<code>        </code><code>print</code><code>(</code><code>'\t\t\t%s sleep %d over'</code> <code>%</code> <code>(task, sleepTime))</code>

<code>    </code><code>loop </code><code>=</code> <code>asyncio.get_event_loop()</code>

<code>    </code><code>totalSleepTime </code><code>=</code> <code>loop.run_until_complete(ProcAll(taskList))</code>

相關閱讀:

本文轉自walker snapshot部落格51CTO部落格,原文連結http://blog.51cto.com/walkerqt/1893879如需轉載請自行聯系原作者

RQSLT