2024年最新Python--多任务(多进程,多线程,协程)_python多进程任务

import multiprocessing

def copy_file(q,file_name,old_folder_name,new_folder_name):
“”“完成文件的复制”“”
# print(“=====>模拟copy文件:从%s---->到%s 文件名:%s” % (old_folder_name,new_folder_name,file_name))
old_f = open(old_folder_name + “/” + file_name,“rb”)
content = old_f.read()
old_f.close()

new_f = open(new_folder_name + "/" + file_name,"wb")
new_f.write(content)
new_f.close()

# 如果拷贝完了文件,那么就想队列中写入一个消息,表示已经完成
q.put(file_name)

def main():
# 1.获取用户要copy的文件夹的名字
old_folder_name = input(“请输入要copy的文件夹的名字:”)

# 2.创建一个新的文件夹
try:
    new_folder_name = input("请输入要copy的文件夹的名字:")
    os.mkdir(new_folder_name)
except Exception as e:
    pass

# 3.获取文件的所有的待copy的文件名字 listdir()
file_names = os.listdir(old_folder_name)
# print(file\_names)

# 4.创建进程池
po = multiprocessing.Pool(5)

# 5.创建一个队列
q = multiprocessing.Manager().Queue()

# 6.向进程池中添加copy文件的任务
for file_name in file_names:
    po.apply_async(copy_file,args=(q,file_name,old_folder_name,new_folder_name))

po.close()

# po.join()
all_file_num = len(file_names) # 获取所以文件的个数
copy_ok_num = 0
while True:
    file_name = q.get()
    # print("已完成%s" % file\_name)
    copy_ok_num += 1
    print("\r拷贝的进度为:%.2f %%" % (copy_ok_num\*100/all_file_num),end='')
    if copy_ok_num >= all_file_num:
        break
print()

if name == “__main__”:
main()


**7.多任务–协程**


a.迭代器:



#!/usr/bin/env python

-*- coding: utf-8 -*-

@File : 迭代器-demo2.py

‘’’
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
‘’’
import time
from collections import Iterable
from collections import Iterator
class Classmate(object):
def __init__(self):
self.names = list()
self.current_num = 0

def add(self,name):
    self.names.append(name)

def \_\_iter\_\_(self):
    """如果想要一个对象称为一个可以迭代的对象,即可以使用for,那么必须实现\_\_iter\_\_方法"""
    return self

def \_\_next\_\_(self):
    if self.current_num < len(self.names):
        ret = self.names[self.current_num]
        self.current_num += 1
        return ret
    else:
        raise StopIteration

if name == ‘__main__’:
classmate = Classmate()
classmate.add(‘老王’)
classmate.add(‘王二’)
classmate.add(‘张三’)

# print("判断classmate是否是可以迭代的对象:",isinstance(classmate,Iterable))
# classmate\_iterator = iter(classmate)
# print("判断classmate\_iterator是否是迭代器:",isinstance(classmate\_iterator,Iterator))
# print(next(classmate\_iterator))

for item in classmate:
    print(item)
    time.sleep(1)


#!/usr/bin/env python

-*- coding: utf-8 -*-

@File : 迭代器–斐波那契数列.py

class Fibonacci(object):
def __init__(self,all_num):
self.all_num = all_num
self.current_num = 0
self.a = 0
self.b = 1

def \_\_iter\_\_(self):
    return self

def \_\_next\_\_(self):
    if self.current_num < self.all_num:
        ret = self.a

        self.a,self.b = self.b,self.a+self.b
        self.current_num += 1

        return ret
    else:
        raise StopIteration

if name == “__main__”:
fibo = Fibonacci(10)
for num in fibo:
print(num)


b.生成器==特殊的迭代器



‘’’
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
‘’’
#!/usr/bin/env python

-*- coding: utf-8 -*-

@File : 迭代器–斐波那契数列.py

def create_num(all_num):
# a = 0
# b = 1
a, b = 0, 1
current_num = 0
while current_num < all_num:
yield a
a, b = b, a+b
current_num += 1

if name == “__main__”:
# 如果在调用create_num的时候,发现这个函数有yield,那么此时,不是调用函数,而是创建一个生成器对象
obj = create_num(10)
for num in obj:
print(num)



#!/usr/bin/env python

-*- coding: utf-8 -*-

@File : 迭代器–斐波那契数列–研究.py

def create_num(all_num):
# a = 0
# b = 1
a, b = 0, 1
current_num = 0
while current_num < all_num:
yield a
a, b = b, a+b
current_num += 1

if name == “__main__”:
obj = create_num(50)
# 如果在调用create_num的时候,发现这个函数有yield,那么此时,不是调用函数,而是创建一个生成器对象
while True:
try:
ret = next(obj)
print(ret)
except Exception as ret:
break



#!/usr/bin/env python

-*- coding: utf-8 -*-

@File : 迭代器–斐波那契数列–研究.py

‘’’
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
‘’’
def create_num(all_num):
# a = 0
# b = 1
a, b = 0, 1
current_num = 0
while current_num < all_num:

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值