1. 程式人生 > >python 多cpu並行程式設計

python 多cpu並行程式設計

python 多執行緒只能算併發,因為它智慧使用一個cpu核心

python 下 pp包支援多cpu平行計算

安裝  

pip install pp


使用

#-*- coding: UTF-8 -*-
import math, sys, time
import pp
def IsPrime(n):
    """返回n是否是素數"""
    if not isinstance(n, int):
        raise TypeError("argument passed to is_prime is not of 'int' type")
    if n < 2:
        return False
    if n == 2:
        return True
    max = int(math.ceil(math.sqrt(n)))
    i = 2
    while i <= max:
        if n % i == 0:
            return False
        i += 1
    return True
def SumPrimes(n):
    for i in xrange(15):
        sum([x for x in xrange(2,n) if IsPrime(x)])
    """計算從2-n之間的所有素數之和"""
    return sum([x for x in xrange(2,n) if IsPrime(x)])
inputs = (100000, 100100, 100200, 100300, 100400, 100500, 100600, 100700)
# start_time = time.time()
# for input in inputs:
#     print SumPrimes(input)
# print '單執行緒執行,總耗時', time.time() - start_time, 's'
# # tuple of all parallel python servers to connect with
ppservers = ()
#ppservers = ("10.0.0.1",)
if len(sys.argv) > 1:
    ncpus = int(sys.argv[1])
    # Creates jobserver with ncpus workers
    job_server = pp.Server(ncpus, ppservers=ppservers)
else:
    # Creates jobserver with automatically detected number of workers
    job_server = pp.Server(ppservers=ppservers)
print "pp 可以用的工作核心執行緒數", job_server.get_ncpus(), "workers"
start_time = time.time()
jobs = [(input, job_server.submit(SumPrimes,(input,), (IsPrime,), ("math",))) for input in inputs]#submit提交任務
for input, job in jobs:
    print "Sum of primes below", input, "is", job()# job()獲取方法執行結果
print "多執行緒下執行耗時: ", time.time() - start_time, "s"
job_server.print_stats()#輸出執行資訊

執行結果
pp 可以用的工作核心執行緒數 4 workers
Sum of primes below 100000 is 454396537
Sum of primes below 100100 is 454996777
Sum of primes below 100200 is 455898156
Sum of primes below 100300 is 456700218
Sum of primes below 100400 is 457603451
Sum of primes below 100500 is 458407033
Sum of primes below 100600 is 459412387
Sum of primes below 100700 is 460217613
多執行緒下執行耗時:  15.4971420765 s
Job execution statistics:
 job count | % of all jobs | job time sum | time per job | job server
         8 |        100.00 |      60.9828 |     7.622844 | local
Time elapsed since server creation 15.4972219467
0 active tasks, 4 cores


submit 函式定義
def submit(self, func, args=(), depfuncs=(), modules=(),
        callback=None, callbackargs=(), group='default', globals=None):
    """Submits function to the execution queue
        func - function to be executed  執行的方法
        args - tuple with arguments of the 'func' 方法傳入的引數,使用元組
        depfuncs - tuple with functions which might be called from 'func' 傳入自己寫的方法 ,元組
modules - tuple with module names to import 傳入 模組 callback - callback function which will be called with argument list equal to callbackargs+(result,) as soon as calculation is done callbackargs - additional arguments for callback function group - job group, is used when wait(group) is called to wait for jobs in a given group to finish globals - dictionary from which all modules, functions and classes will be imported, for instance: globals=globals() """


相關推薦

python cpu並行程式設計

python 多執行緒只能算併發,因為它智慧使用一個cpu核心 python 下 pp包支援多cpu平行計算 安裝   pip install pp使用 #-*- coding: UTF-8 -*- import math, sys, time import pp def

Python 程序並行程式設計實踐: multiprocessing 模組

Python 多程序並行程式設計實踐: multiprocessing 模組 2017/04/17 · 實踐專案 · multiprocessing, 多程序, 並行 本文作者: 伯樂線上 - iPytLab&n

Python 程序程式設計解決python執行緒程式設計CPU利用率低的問題

之前用python寫了個多執行緒,但發現四核的電腦,CPU利用率卻用了不到30%,後來使用多程序程式設計,四核全開,CPU利用率達到了100%!python中的多執行緒其實並不是真正的多執行緒,如果想要充分地使用多核CPU的資源,在python中大部分情況需要使用多程序。Py

Python執行緒程式設計,執行緒鎖

1 2 3 from threading import Thread 4 import time 5 ​ 6 class MyThread(Thread): 7 name1 = 'MyThread-1' 8 def __init__(self,target,args

Python執行緒程式設計,執行緒鎖,以及補充上一篇程序文章

程序補充 程序間的訊號 訊號是唯一的非同步通訊方法 一個程序向另一個程序傳送一個訊號來傳遞某種資訊,接受者根據傳遞的資訊來做相應的事 $ kill -l檢視系統訊號說明 $ kill -9 pid號對程序傳送訊號 訊號名稱 說明

讓虛擬環境解決python版本並行

一.安裝篇 1.本文作業系統為CentOS7 依賴包(安裝時可能還存在其他依賴包,結合報錯進行安裝) [[email protected] home]# yum install make build-essential libssl-dev zlib1g-dev libbz2-dev libr

Python執行緒程式設計

#!/usr/bin/python #!coding=utf-8 import threading import time exitFlag = 0 class MyThread(threading.Thread): def __init__(self, threadID, name, counte

談談python執行緒程式設計

談談python多執行緒程式設計 Python中GIL概念 Python(CPython)不是執行緒安全的,所以我們需要一個GIL(Global interpreter Lock),來保證資料完性和安全性。也就是同一時間內同一核CPU中只能有一個GIL。 Threading的GI

python執行緒程式設計之Queue---put/get 方法的阻塞

python 中,佇列是執行緒間最常用的交換資料的形式。Queue模組是提供佇列操作的模組,雖然簡單易用,但是不小心的話,還是會出現一些意外。 1. 阻塞模式導致資料汙染 import Queue        q = Queue.Queue(10)        for

一文學會 Python 執行緒程式設計

import logging import threading class MyThread(threading.Thread): def __init__(self, number, logger): threading.Thread.__init__(self)

python 執行緒程式設計(一個經典例子)

python 多執行緒經典案例(摘自《python核心程式設計》) 使用佇列的資料結構,生產者生產商品,消費者選取商品,且時間均不固定 from random import randint from time import sleep from queu

python 執行緒程式設計

import threading #當前執行緒 列印執行緒名 t=threading.current_thread() print(t.name) #活動執行緒數 print(threading.active_count()) #當前主執行緒 t=threading

python執行緒程式設計(4): 死鎖和可重入鎖

線上程間共享多個資源的時候,如果兩個執行緒分別佔有一部分資源並且同時等待對方的資源,就會造成死鎖。儘管死鎖很少發生,但一旦發生就會造成應用的停止響應。下面看一個死鎖的例子: # encoding: UTF-8import threadingimport timec

五種主要並行程式設計方法分析與比較

隨著多核時代的到來與流行,傳統的單執行緒序列程式的程式設計模式必將改變,取而代之的將是並行程式設計。目前已經有五種主要並行程式設計模型,下面將對此五種模型進行概括性的分析與比較: 1. MPI   MPI(Message Passing Interface)訊息傳遞介面是MPI論壇釋出的一個庫,而不是一門實

python執行緒程式設計(3): 使用互斥鎖同步執行緒

問題的提出 上一節的例子中,每個執行緒互相獨立,相互之間沒有任何關係。現在假設這樣一個例子:有一個全域性的計數num,每個執行緒獲取這個全域性的計數,根據num進行一些處理,然後將num加1。很容易寫出這樣的程式碼: # encoding: UTF-8import

[Python]執行緒程式設計&執行緒間共享變數&消費者生產者問題的解決

由於單程序爬蟲的種種弊端,以及大量獲取資料的需要,我最近開始寫分散式爬蟲。儘管網上已經有比較現成的方案,如scrapy+rq等,但是出於種種原因考慮,比如部署的難易程度,任務比較單一,以及想自己練練手等,還是決定由自己實現儘可能多的功能。 在寫的過程中,不可避

python執行緒程式設計(8):執行緒的合併和後臺執行緒

threading import random import time class MyThread(threading.Thread): def run(self): wait_time=random.randrange(1,10) print "%s will

python執行緒程式設計(二)--threading模組

threading模組物件 物件 描述 Thread 一個執行緒的執行物件 Lock 鎖物件 RLock 可重入鎖物件,使單執行緒可以再次獲得已經獲得了的鎖(遞迴鎖定) Condition 條件變數,讓一個執行緒停下來,等待其它執行緒滿足了某個條件 Event

CPUpython線程並行的一個假象

llb 使用 發展 重要 multi 定律 依賴 並發 操作 引用鏈接:http://www.cnblogs.com/pengyingh/articles/6586760.html GIL 與 Python 線程的糾葛 GIL 是什麽東西?它對我們的 python 程序會產

Python並行程式設計(十):執行緒效能評估

1、基本概念       GIL是CPython直譯器引入的鎖,GIL在直譯器層面阻止了真正的並行執行。直譯器在執行任何執行緒之前,必須等待當前正在執行的執行緒釋放GIL,事實上,直譯器會強迫想要執行的執行緒必須拿到GIL才能訪問直譯器的任何資源,例如棧或Python物件等,這也正是GIL的目的,為了阻止不同