多个进程同时操作同一个列表的问题

多个进程同时操作同一个列表的问题

多个进程同时操作 lists ,会不会出现同一时间不同进程操作lists的同一元素导致错误

完整代码:

# coding:utf-8

"""
该代码为Python 3实现,使用了多线程来加快程序的运行效率。
主要功能是对一个列表进行操作,每次随机选择一个元素并将其复制到新列表中,同时删除原列表中的该元素。最后输出原始列表、新列表和程序运行的时间。
在主函数中,首先定义了一个空列表lists和一个新列表new_lists。然后定义了一个work()函数,用于对lists进行操作。如果lists为空,
则直接返回。否则,从lists中随机选择一个元素,复制到新列表中,并将该元素从lists中删除。接着使用time.sleep(1)来等待一秒钟,模拟操作的时间消耗。
在主函数的for循环中,依次创建多个线程t_list,每个线程都调用work()函数来对lists进行操作。最后使用join()方法等待所有线程执行完毕。
输出结果包括原始列表、新列表和程序运行的时间。
"""

import time
import random
import threading

lists = ['python', 'django', 'tornado',
         'flask', 'bs5', 'requests', 'uvloop'
         ]

new_lists = []


def work():  # 跟进程一样,没什么好注释的
    if not len(lists):
        return
    data = random.choice(lists)
    lists.remove(data)
    new_lists.append(data)
    time.sleep(1)


if __name__ == '__main__':
    start = time.time()
    t_list = []
    print(f'原始列表:{lists}')
    for i in range(len(lists)):
        t = threading.Thread(target=work)
        t_list.append(t)
        t.start()
    for t in t_list:
        t.join()
    print(f'新列表:{new_lists}')
    print(f'程序运行时间{time.time() - start}')


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学,你好!同学写的是线程,多线程之间可能会存在这个问题,若想保证数据完整性,可以加一个线程锁,确保同一时间只有一线程在操作该函数。

https://img1.sycdn.imooc.com//climg/64740d7409c2140c07430684.jpg

祝学习愉快~

  • Mr朱_ 提问者 #1

    那进程也会吗?

    2023-05-29 12:49:47
  • 好帮手慕小猿 回复 提问者 Mr朱_ #2

    同学,你好!进程间数据共享,若想保证数据完整性,也是可以加锁的

    祝学习愉快~

    2023-05-29 13:38:33
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师