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

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

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

完整代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 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 in range(len(lists)):
        = threading.Thread(target=work)
        t_list.append(t)
        t.start()
    for 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下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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