鱼C论坛

 找回密码
 立即注册
查看: 6702|回复: 13

python有没有将两行代码或函数并行运行的方法。

[复制链接]
发表于 2021-7-1 22:09:08 | 显示全部楼层 |阅读模式
50鱼币
本帖最后由 非凡 于 2021-7-1 22:11 编辑

        发呆的时候,脑子里突然就有了个疑问,代码都是从上往下运行,       

        即便用了循环,递归,那它还是线性的在跑代码,不过是在中途转了一个或多个圈圈,然后继续往下走,始终都是一条路,并没有分叉路。

        我就在想应该存在使 两段代码同时运行的方法吧?

        举个例子:
        这里要将 a 列表和 b 列表里的相对应位置的数相加放到c列表里去。
       
a = [1,2,3,4,5,6]
b = [9,8,7,6,5,4]
c = []


for i in range(6):
    c.append(a[i]+b[i])

我能想到的是上面代码这样,对于上面这代码我的理解是:“for i in range (6)”这里好比是个人,同时伸两只手去a,b相同位置取东西,然后合并在一起,放到c的相同位置。这里工作的只有“一个人”。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
而我想要的是能不能让“两个人”,一个人x是“for x in a:",一个人y是”for y in b:“同时工作,分别从a 和 b 里按顺序取出东西,然后放到c相应位置。好比流水线上,x 流水线生成a物品,y流水线生成b物品,让后同时生产出来的两个成品组在一起装箱。
for x in a:————
    x          \
                   ——>        c.append(x+y)
                /
for y in a:————
    y
上面这代码不是正确代码,只是想表达我的想法而已。

我想过一个办法,就是把代码换成函数,然后同时调用两个函数。但我没成功,貌似函数只能返回一个值,不能返回多个值,除非多次调用函数和使用递归,其实递归也是多次调用函数吧。。而递归也是先运行完一个递归,再运行下一个递归。

失败的例子:
a = [1,2,3,4,5,6]
b = [9,8,7,6,5,4]
c = []


def x(y):
    for i in y:
        return i

x(a) + x(b)


那正确的方法是什么?能否有大神帮忙解惑?

关键需求不是完成上面那个例子,而是要满足:
1、实现同时并行两段代码。
2、两段代码是同步运行,且能连续返回多个结果。
3、通过一个机制能获取两段代码同一时刻返回的结果对其进行加工。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-1 22:14:21 | 显示全部楼层
题目发出来吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-1 22:14:36 | 显示全部楼层
你这个没必要用到那个思路
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-1 22:19:00 | 显示全部楼层
你这种情况,用多线程纯粹是浪费,各种调用不见得能比你第一个快多少,甚至可能更慢

现在你先学会基础的,再去考虑多线程之类的东西
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-7-1 23:14:13 | 显示全部楼层

就用上面那个简单的例子行不行?
a= [1,2,3,4,5,6]
b= [9,8,7,6,5,4]
c=[]
从a和b,同时、按顺序提取相应数字,加工后放到c列表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-7-1 23:15:02 | 显示全部楼层
Daniel_Zhang 发表于 2021-7-1 22:19
你这种情况,用多线程纯粹是浪费,各种调用不见得能比你第一个快多少,甚至可能更慢

现在你先学会基础的,再 ...

例子而已,哪去考虑什么浪费不浪费呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-1 23:38:29 From FishC Mobile | 显示全部楼层
多线程
线程1从a取出值放入临时变量
线程2从b取出值放入临时变量
线程3负责将两个临时变量取出并相加,放入c

单就你的例子来说,用以上方法的多线程99%的可能会比你第一段代码跑的慢,因为使用多线程实现,中间会多几个环节,还有线程之间的等待时间,线程运行开销等
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-1 23:38:49 | 显示全部楼层
多线程,多进程
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-1 23:46:31 | 显示全部楼层
非凡 发表于 2021-7-1 23:14
就用上面那个简单的例子行不行?
a= [1,2,3,4,5,6]
b= [9,8,7,6,5,4]

这个例子是不需要多线程的
a = [1, 2, 3, 4, 5, 6]
b = [9, 8, 7, 6, 5, 4]
c = []
for x, y in zip(a, b):
    c.append(x + y)
print(c)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-2 08:39:12 | 显示全部楼层
我在初学的时候,也考虑过这个问题。
我想让python同时做两件事(同时执行两个函数)该怎么办呢
其实python有多线程以及多进程,专门针对这种情况
在我们基础学完之后,可以自学他们的使用

附官方文档
threading多进程
https://docs.python.org/zh-cn/3/library/threading.html
multiprocessing多进程
https://docs.python.org/3.9/library/multiprocessing.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-2 10:02:19 | 显示全部楼层
没意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-4 09:52:49 | 显示全部楼层
非凡 发表于 2021-7-1 23:15
例子而已,哪去考虑什么浪费不浪费呢?


我不明白这个并行运行有什么用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-4 17:05:23 | 显示全部楼层
线程,协程,纤程,进程任你挑。你有这个想法固然是好的,但是建议你学的再深入一点再去学并发编程。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-6 11:22:54 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-14 18:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表