首页 > 编程语言 > 详细

多线程代码讲解

时间:2017-09-04 23:30:13      阅读:170      评论:0      收藏:0      [点我收藏+]

threading模块介绍

multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性,因而不再详细介绍

官网链接:https://docs.python.org/3/library/threading.html?highlight=threading#

开启多线程的两种方法

方法1: 常用

from threading import Thread

def task():
    print(is running)
if __name__==__main__:
    t=Thread(target=task,)
    t.start() #开启线程的开销小,速度快 线程开启在进程里,基于当前进程的空间中开启线程
    print()
‘‘‘
开启一个线程的打印结果: 依次打印
is running
主
‘‘‘

from multiprocessing import Process

def task():
    print(is ruuing)
if __name__==__main__:
    p=Process(target=task,)
    p.start()#开启进程的开销大,速度慢,发送开启进程的指令给系统后,系统需要调用资源开启,需要时间,这时print打印操作已经执行
    print()
‘‘‘
开启进程的打印结果:
主
is ruuing
‘‘‘

方法2:  不常用,也有人这么用

from threading import Thread
class Mythread(Thread):
    def run(self):
        print(is running)

if __name__==__main__:
    t=Mythread()
    t.start()
    print()
‘‘‘
is running
主
‘‘‘

在一个进程下开启多个线程与在一个进程下开启多个子进程的区别

技术分享
from threading import Thread
class Mythread(Thread):
    def run(self):
        print(is running)

if __name__==__main__:
    t=Mythread()
    t.start()
    print()
‘‘‘
is running
主
‘‘‘


from threading import Thread
from multiprocessing import Process
import os

def task():
    print(%s is running %os.getpid())

if __name__==__main__:
    t1=Thread(target=task,)
    t2 = Thread(target=task, )
    t1.start()
    t2.start()
    print(,os.getpid())
‘‘‘
#都是在同一个进程中
1884 is running
1884 is running
主 1884
‘‘‘


from threading import Thread
from multiprocessing import Process
import os

def task():
    print(%s is running %os.getpid())

if __name__==__main__:
    p1=Process(target=task,)
    p2 = Process(target=task, )
    p1.start()
    p2.start()
    print(,os.getpid())

‘‘‘
#主进程id和两个子进程id
主 7816
6452 is running
8436 is running
‘‘‘
pid
技术分享
from threading import Thread
from multiprocessing import Process

n=100
def work():
    global n
    n=0

if __name__==__main__:
    p=Process(target=work,)
    p.start()
    p.join()
    print(,n)
‘‘‘
主 100
发现n并没有被修改  因为主进程是这个程序就run
这个文件,子进程是p,只进程和子进程空间上完全独立
创建子进程p的时候,子进程拷贝父进程的状态,里边也包括
n=100,然后global n=0 修改的是子进程的全局变量,
打印的n是父进程的全局变量,所以没有变

‘‘‘

from threading import Thread
from multiprocessing import Process

n=100
def work():
    global n
    n=0

if __name__==__main__:
    t=Thread(target=work,)
    t.start()
    print(,n)
‘‘‘
主 0
发现改变了  以为同一进程内的线程之间空间共享
‘‘‘
名称空间

 

多线程代码讲解

原文:http://www.cnblogs.com/lazyball/p/7476263.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!