先看看效果:
文章图片
方法一(协程容易理解):
由于线程之间的执行是无序的,但是线程产生的协程(协程又叫微线程)是可以有序执行的,所以线程在此还是略显鸡肋的,这里要对生成器,迭代器有所了解,利用生成器中next方法将可迭代对象的值依次拿到拼接即可
望帮助到的朋友可以给个大拇指,谢谢啦?
import threading
import time
def work(a, index):for i in range(26):
d = str(a[index])
index += 1
b = str(a[index])
c = d + b
index += 1
# print(c)
yield c
# mutex.release()
time.sleep(0.1)def task():
for i in range(65, 91):
# for i in range(97,123):
# print(chr(i))
yield chr(i)
time.sleep(0.1)if __name__ == '__main__':
a = []
index = 0
for i in range(1, 53):
a.append(i)# 由于线程是无序的,所以在此线程是鸡肋,主要还是靠协程,它是微线程
thread_1 = threading.Thread(target=work,args=(a, index))
thread_2 = threading.Thread(target=task)thread_1.start()
thread_2.start()
b1 = work(a, index)
b2 = task()
for _ in range(26):
a1 = next(b1)
a2 = next(b2)
print(a1 + a2)
方法二(利用互斥锁,递归函数解决,略微难点):
都是可以达到效果的
一块看一下:
文章图片
【创建两个线程,其中一个输出1 - 52,另外一个输出A - Z。输出格式要求( # 12A 34B 56C 78D 【更新两种方法】)】代码:
import threading
import timelockA = threading.Lock()
lockB = threading.Lock()def printNumber(n):
if n > 50:
return
n += 1
# A B 都上锁,解锁在对方函数内从而使无序的线程变得有序
lockA.acquire()
print("%d%d" % (n, n + 1), end="")
lockB.release()
# 让线程1先打印
time.sleep(0.01)
# 递归调用
printNumber(n + 1)def printAlpha(n):
if n > 90:
return
lockB.acquire()
print(chr(n), end=' ')
lockA.release()
time.sleep(0.02)
# 递归调用
printAlpha(n + 1)lockB.acquire()
t1 = threading.Thread(target=printNumber, args=(0,))
t2 = threading.Thread(target=printAlpha, args=(65,))
t1.start()
t2.start()
推荐阅读
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- Python专栏|数据分析的常规流程
- Python|Win10下 Python开发环境搭建(PyCharm + Anaconda) && 环境变量配置 && 常用工具安装配置
- Python绘制小红花
- Pytorch学习|sklearn-SVM 模型保存、交叉验证与网格搜索
- OpenCV|OpenCV-Python实战(18)——深度学习简介与入门示例
- python|8. 文件系统——文件的删除、移动、复制过程以及链接文件
- 爬虫|若想拿下爬虫大单,怎能不会逆向爬虫,价值过万的逆向爬虫教程限时分享
- 分布式|《Python3网络爬虫开发实战(第二版)》内容介绍
- java|微软认真聆听了开源 .NET 开发社区的炮轰( 通过CLI 支持 Hot Reload 功能)