import multiprocessing import time def tar1(args): for i in range(1,11,2): args += [i] def tar2(args): for i in range(2,11,2): args += [i] if __name__ == "__main__": sharng_list=multiprocessing.Manager().list() p1=multiprocessing.Process(target=tar1,args=(sharng_list,)) p2=multiprocessing.Process(target=tar2,args=(sharng_list,)) p2.start() p1.start() p1.join() p2.join() print(sharng_list)
时间: 2023-11-16 13:03:49 浏览: 26
这是一个用 Python 的 multiprocessing 模块实现的多进程程序。该程序创建了一个共享列表 sharng_list,并将它作为参数传递给两个进程 p1 和 p2。这两个进程分别执行函数 tar1 和 tar2,每个函数将一些数字添加到共享列表中。
由于多进程程序中的进程是并行执行的,因此无法确定这些数字添加到共享列表中的顺序。因此,输出的 sharng_list 可能会是任意顺序的数字列表。
相关问题
if __name__ == '__main__': import multiprocessing import time def dance(): for i in range(3): print("跳舞中...") time.sleep(0.2) def sing(): for i in range(3): print("唱歌中...") time.sleep(0.2) dance_process = multiprocessing.Process(target=dance) sing_process = multiprocessing.Process(target=sing) dance_process.start() sing_process.start()
这是一个 Python 的多进程示例程序,其中包括两个函数 `dance()` 和 `sing()` 分别用于跳舞和唱歌,通过 `multiprocessing.Process` 创建两个进程分别执行这两个函数,可以同时跳舞和唱歌。
帮我重写如下代码from multiprocessing import Process,Queue from threading import Thread import time import os #先进先出 def def_a(): q=Queue(10) q.put("5") q.put("A") print(q.get()) def task(a): res=0 for i in range(10): res=res+1 if name=='main': def_a() r=4 a=os.cpu_count() print(a) start=time.time() dd=[] for i in range(r): p=Process(target=task,args=(i,)) p.start() print(i) p.join()#join方法 end=time.time() print("用时1",end-start) a=os.cpu_count() print(a) start=time.time() l=[] for i in range(r): p2=Thread(target=task,args=(i,)) p2.start() print(i) l.append(p2) for ppp in l: ppp.join()#join方法 #print("a"+str(i)) end=time.time() print("用时",end-start) #time.sleep(5)
重写后的代码如下:
```python
from multiprocessing import Process, Queue
from threading import Thread
import time
import os
# 先进先出
def def_a():
q = Queue(10)
q.put("5")
q.put("A")
print(q.get())
# 进程任务
def process_task(a):
res = 0
for i in range(10):
res += 1
if __name__ == '__main__':
# 调用 def_a() 函数创建一个队列
def_a()
# 获取当前 CPU 的核心数,并打印出来
cpu_count = os.cpu_count()
print("当前 CPU 核心数:", cpu_count)
# 多进程
start = time.time()
process_list = []
for i in range(cpu_count):
p = Process(target=process_task, args=(i,))
p.start()
print("进程", i, "已启动")
process_list.append(p)
for p in process_list:
p.join() # join方法,等待所有进程执行完毕
end = time.time()
print("多进程用时:", end - start)
# 多线程
start = time.time()
thread_list = []
for i in range(cpu_count):
t = Thread(target=process_task, args=(i,))
t.start()
print("线程", i, "已启动")
thread_list.append(t)
for t in thread_list:
t.join() # join方法,等待所有线程执行完毕
end = time.time()
print("多线程用时:", end - start)
```
重写后的代码中,注重以下几个方面:
1. 在代码中增加了注释,使得代码更加易读易懂。
2. 修改了函数名,使其更加符合函数的功能。
3. 在多进程和多线程的循环中,将循环次数设置为当前 CPU 核心数,以充分利用 CPU 的性能。
4. 在多进程和多线程的循环中,将进程和线程分别存储在列表中,在循环结束后分别使用 join 方法等待所有进程或线程执行完毕。
5. 在计算多进程和多线程用时时,使用了更加简洁的写法,使代码更加简洁明了。