博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
进程基础整理
阅读量:6626 次
发布时间:2019-06-25

本文共 4114 字,大约阅读时间需要 13 分钟。

进程实例: import threading import time def run(n):     print("task",n)     time.sleep(2) t1 = threading.Thread(target=run,args = ("t1",)) t2 = threading.Thread(target=run,args = ("t2",)) t1.start() t2.start() 多线程类实现方法:
class MyThread(threading.Thread):     def __init__(self,n):         super(MyThread,self).__init__()         self.n = n     def run(self):         print("runint task",self.n) t1 = MyThread("t1") t1.run() 一个程序有多个线程的话,子线程是并发执行的,怎么才能等等子线程结束结果呢,关健字join()

import threading
import time

 

def run(n):

print("task ",n )
time.sleep(2)
print("task done",n)

 

start_time = time.time()

t_objs = [] #存线程实例
for i in range(50):
t = threading.Thread(target=run,args=("t-%s" %i ,))
t.start()
t_objs.append(t) #为了不阻塞后面线程的启动,不在这里join,先放到一个列表里

 

# for t in t_objs: #循环线程实例列表,等待所有线程执行完毕

# t.join()

 

print("----------all threads has finished...")
print("cost:",time.time() - start_time)
# run("t1")
# run("t2")

如何做到主线程结束,子线程就结束呢,要用到守护线程  关健字  .setDaemon(True)

import threading
import time

def run(n):

print("task ",n )
time.sleep(2)
print("task done",n,threading.current_thread())

start_time = time.time()

t_objs = [] #存线程实例
for i in range(50):
t = threading.Thread(target=run,args=("t-%s" %i ,))
t.setDaemon(True) #把当前线程设置为守护线程
t.start()
t_objs.append(t) #为了不阻塞后面线程的启动,不在这里join,先放到一个列表里

# for t in t_objs: #循环线程实例列表,等待所有线程执行完毕

# t.join()

time.sleep(2)

print("----------all threads has finished...",threading.current_thread(),threading.active_count())
print("cost:",time.time() - start_time)
# run("t1")
# run("t2")

全局解析器锁

无论你的主机有多少个核,python的线程其实只有一个线程,一切都是假象 上下文切换。它是调用c写的原生内核接口,加锁方法,,,,python3.0以上会自动加锁,新版忽略

 

_author__ = "Alex Li"

 

import threading

import time

 

def run(n):

lock.acquire()
global num
num +=1
time.sleep(1)
lock.release()

 

lock = threading.Lock()
num = 0
t_objs = [] #线程实例
for i in range(50):
t = threading.Thread(target=run,args=("t-%s" %i ,))
t.start()
t_objs.append(t) #为了不阻塞后面线程的启动,不在这里join,先放到一个列表里

 

for t in t_objs: #循环线程实例列表,等待所有线程执行完毕

t.join()

 

print("----------all threads has finished...",threading.current_thread(),threading.active_count())

 

print("num:",num)

线程无法发挥计算机性能,,只适用io操作,大密集CPU操作时用进程  下面一人简单的例子创造进程

from multiprocessing import Process

import time

 

def f(name):

 

    time.sleep(2)

 

    print('hello', name)

 

 

 

if __name__ == '__main__':

 

    = Process(target=f, args=('bob',))

 

    p.start()

 

    p.join()
 
也可以写成:
 

import multiprocessing

import time

def run(name):

time.sleep(1)

print('hello',name)

if __name__ == "__main__":

for i in range(10):

print("e")

p = multiprocessing.Process(target =run, args = ('xs',))

p.start()

p.join()

 

 

import multiprocessing import time def f(name):     time.sleep(1)     print('hello',name) if __name__ == "__main__":     for i in range(10):         print("e")         p = multiprocessing.Process(target =f, args = ('xs',))         p.start()         p.join() 如何在进程中加入线程例子:
import multiprocessing import time,threading def thr():     print('输出当前线程',threading.get_ident()) def run(name):     time.sleep(1)     print('hello',name)     #没有参数直接忽略,逗号结束     t = threading.Thread(target=thr,)     t.start() if __name__ == "__main__":     for i in range(10):         p = multiprocessing.Process(target =run, args = ('xs',))         p.start()         p.join()
#每一个进程都是父进程启动的,,, from multiprocessing import Process import os def info(title):     print(title)     print('module name',__name__)     print('父进程id',os.getppid())     print('自己的进程id',os.getpid()) def f(name):     info('\033[31;1m dfdfdfdfdfdfd \033[0m')     print("hello",name) if __name__=='__main__':     info('\033[31;1m dfdfdfdfdfdfd \033[0m')     p = Process(target = f,args = ('bob',))     p.start()     p.join()
  
#每一个进程都是父进程启动的,,, # 本程序的第一个父ID是pychrm  子进程是自己写的那个主函数,,而主函数调用手,子进程 变成了子进程的父进程 id from multiprocessing import Process import os def info(title):     print(title)     print('module name',__name__)     print('父进程id',os.getppid())     print('自己的进程id',os.getpid()) def f(name):     info('\033[31;1m funcif \033[0m')     print("hello",name) if __name__=='__main__':     info('\033[31;1m pychrmfun \033[0m')     p = Process(target = f,args = ('bob',))     p.start()     p.join()
 
 

 

 

 

 

 

 
 

转载于:https://www.cnblogs.com/fgxwan/p/9639785.html

你可能感兴趣的文章
Webtop中新建文档,无法选择Type和Format
查看>>
Integration Services创建ETL包
查看>>
IE浏览器开发中遇到的问题
查看>>
【C#学习笔记】载入图片并居中
查看>>
php实现按utf8编码对字符串进行分割
查看>>
Ftp的断点下载实现
查看>>
[转载] ubuntu Authentication failure
查看>>
Ring0 - 链表
查看>>
修改数组之----splice
查看>>
a版本冲刺第五天
查看>>
Arduino示例教程超声波测距实验
查看>>
Redis操作hash
查看>>
轻松搞定个人虚拟桌面部署之5-在客户端测试远程桌面
查看>>
Linux中chkconfig使用介绍
查看>>
二进制方式快速安装MySQL数据库
查看>>
Centos5上部署udev
查看>>
挑战WORD极限排版之模板与加载项
查看>>
Tomcat配置多数据源
查看>>
(转)快速搭建PHP开发环境WAMP+ZendStudio+ZendDebugger
查看>>
js string format
查看>>