当我们需要同时执行多个任务的时候,可以采用多线程或者多进程的架构:
如果是IO密集型任务,可以采用多线程,更好
如果是计算密集型任务,最好采用多进程
以下是python开启多进程与多线程的两种方式:
多进程方式1:
from multiprocessing import Process
import time
#from threading import Thread ###这个是导入处理线程的模块
###这两个模块 一个处理线程 一个处理进程 用法是一模一样的 只需要学会一个 另一个就很好掌握了
def task1 ():
for i in range(10):
print('%d 子进程1 is running' % i)
time.sleep(1)
def task2():
for i in range(10):
print("%d 子进程2 is running also " % i )
time.sleep(1)
# 在windonws 操作系统下面 ,开启子进程的操作必须写到 __main__ 下面去
if __name__ == '__main__':
# 开启了进程后如果调用的函数需要传参,可以用元组 位置参数的方式传
# 也可以用字典 关键字参数的形式进行传
obj1 = Process(target=task1)
obj1.start()
obj2 = Process(target=task2)
obj2.start()
多进程方式2:
# #开启子进程的方式2
# ##定义一个类继承原来的Process
from multiprocessing import Process
import time
class Myprocess(Process):
def __init__(self):
super().__init__()
def run(self):
for i in range(10):
print('%d 子进程1 is running' % i)
time.sleep(1)
if __name__ == '__main__':
obj = Myprocess()
obj.start()
print('主程序')
多线程方式1:
from threading import Thread
import time
def task1():
for i in range(10):
print('%d 线程1 is running' % i)
time.sleep(1)
def task2():
for i in range(10):
print('%d 线程2 is running' % i)
time.sleep(1)
t1 = Thread(target=task1)
t2 = Thread(target=task2)
t1.start()
t2.start()
多线程方式2
# 第二种方式
from threading import Thread
import time
class MyThread(Thread):
def __init__(self,name):
super().__init__()
self.name = name
def run(self):
for i in range(10):
print('%s 子线程1 is running' % self.name)
time.sleep(1)
t1 = MyThread('jason')
t1.start()
t2 = MyThread('owen')
t2.start()