python 多執行緒 和 多程序

2021-09-01 14:37:19 字數 3935 閱讀 4690

單執行緒例子:

#!/usr/bin/python

# -*- coding:utf-8 -*-

# name: danxiancheng.py

import time

import threading

def loop(num,sec):

print 'loop %s start: ....' % num, time.strftime('%y-%m-%d %h:%m:%s')

time.sleep(sec)

print 'loop %s stop: .....' % num, time.strftime('%y-%m-%d %h:%m:%s')

def main():

print '\nstarting: ........', time.strftime('%y-%m-%d %h:%m:%s'), '\n'

mysec = [3,5,6,8]

for i in range(len(mysec)):

loop(i,mysec[i])

print '\nall done: ........', time.strftime('%y-%m-%d %h:%m:%s'), '\n'

if __name__=='__main__':

main()

列印結果:

[root@xhu_node3 ~]# python singlethread.py

starting: ........ 2012-33-27 05:12:12

loop 0 start: .... 2012-33-27 05:12:12

loop 0 stop: ..... 2012-33-27 05:12:15

loop 1 start: .... 2012-33-27 05:12:15

loop 1 stop: ..... 2012-33-27 05:12:20

loop 2 start: .... 2012-33-27 05:12:20

loop 2 stop: ..... 2012-33-27 05:12:26

loop 3 start: .... 2012-33-27 05:12:26

loop 3 stop: ..... 2012-33-27 05:12:34

all done: ........ 2012-33-27 05:12:34

[root@xhu_node3 ~]#

多執行緒的例子:

#!/usr/bin/python

# -*- coding:utf-8 -*-

# name: duoxiancheng.py

import time

import threading

def loop(num,sec):

print 'loop %s start: ....' % num, time.strftime('%y-%m-%d %h:%m:%s')

time.sleep(sec)

print 'loop %s stop: .....' % num, time.strftime('%y-%m-%d %h:%m:%s')

def main():

print '\nstarting: ........', time.strftime('%y-%m-%d %h:%m:%s'), '\n'

mysec = [3,5,6,8]

mythreads = [threading.thread(target=loop,args=(i,mysec[i])) for i in range(len(mysec))]

for i in mythreads:

i.start()

for i in mythreads:

i.join()

print '\nall done: ........', time.strftime('%y-%m-%d %h:%m:%s'), '\n'

if __name__=='__main__':

main()

執行結果:

[root@xhu_node3 ~]# python mutithread.py

starting: ........ 2012-36-27 05:12:19

loop 0 start: .... 2012-36-27 05:12:19

loop 1 start: .... 2012-36-27 05:12:19

loop 2 start: .... 2012-36-27 05:12:19

loop 3 start: .... 2012-36-27 05:12:19

loop 0 stop: ..... 2012-36-27 05:12:22

loop 1 stop: ..... 2012-36-27 05:12:24

loop 2 stop: ..... 2012-36-27 05:12:25

loop 3 stop: ..... 2012-36-27 05:12:27

all done: ........ 2012-36-27 05:12:27

結論:

可以看到單執行緒中的兩個迴圈, 只有乙個迴圈結束後另乙個才開始。而多執行緒則是程序內所有執行緒一起執行,同步任務。

首先建立了n個執行緒,並將其存放到mythreads列表中,這裡用到的是給thread類傳遞了函式,第乙個for迴圈是讓兩個執行緒開始執行。第二個for迴圈再讓每個執行緒分別呼叫join函式,使程式掛起,直至相應執行緒都執行結束。

多程序例子:

test.py

#!/usr/bin/python

import time

import os

from os import environ

class myclass:

def __init__(self):

self.aa = 1

def geta(self):

return environ['foo']

def suba(self):

self.aa += 1

if __name__ == '__main__':

pass

pro.py

#!/usr/bin/python

import os

import sys

import time, datetime, traceback

from os import environ

from multiprocessing import process

from test import myclass

def create_compute(hostname):

try:

environ['foo'] = hostname

a = myclass()

print a.geta()

except exception as e:

print e

traceback.print_exc()

if __name__ == '__main__':

plist =

for i in 4,5:

p = process(target = create_compute, args = ('node'+str(i),))

p.start()

for p in plist:

p.join()

執行結果:

[root@xhu_node3 ~]# python pro.py

node4

node5

[root@xhu_node3 ~]#

結論:

兩個程序中設定的環境變數 互不影響

多執行緒:

python多執行緒和多程序

pool 感謝多執行緒和多程序最大的不同在於,多程序中,同乙個變數,各自有乙份拷貝存在於每個程序中,互不影響 而多執行緒中,所有變數都由所有執行緒共享,所以,任何乙個變數都可以被任何乙個執行緒修改,因此,執行緒之間共享資料最大的危險在於多個執行緒同時改乙個變數,把內容給改亂了。python中,多執行...

多程序和多執行緒python

coding utf8 import threading import time class mop floor threading.thread def init self super mop floor,self init def run self print 我要拖地了 time.sleep ...

Python 多程序和多執行緒

使用multiprocessing中的process,其中start 代表啟動程序,join 代表等待程序結束再執行後面 程式。from multiprocessing import process from time import time,sleep def func arg time.slee...