python中的多处理挂起诅咒
希望你能帮忙。我试图用python和诅咒编写一个终端应用程序,有一项工作我被迫使用多处理 我面临的问题是,无论我做什么,诅咒都会在我启动多进程python中的多处理挂起诅咒,python,curses,Python,Curses,希望你能帮忙。我试图用python和诅咒编写一个终端应用程序,有一项工作我被迫使用多处理 我面临的问题是,无论我做什么,诅咒都会在我启动多进程p1后立即挂起,我看不到“it works”字符串。然而,如果我从方法foo中删除循环,它就会工作,或者如果我将{print“aaa”}放在foo()方法中,终端就会被垃圾发送字符串 换句话说,诅咒在进程完成之前是不活动的,尽管它应该是活动的。我怎样才能避免呢 import time import math import sys import curses
p1
后立即挂起,我看不到“it works”字符串。然而,如果我从方法foo
中删除循环,它就会工作,或者如果我将{print“aaa”}
放在foo()
方法中,终端就会被垃圾发送字符串
换句话说,诅咒在进程完成之前是不活动的,尽管它应该是活动的。我怎样才能避免呢
import time
import math
import sys
import curses
from multiprocessing import Process, Value, Array
sen1= Value('f',0)
def foo():
while(True):
sen.value = 1
stdscr = curses.initscr()
curses.noecho()
stdscr.border(0)
stdscr.addstr(12, 25, "Python curses in action!")
stdscr.refresh()
p1 = Process(target=foo())
p1.start()
while true:
stdscr.addstr(1,1,"it works" !!)
启动进程(或线程)时,目标需要是对要运行的函数的引用
当你写这篇文章时:
p1 = Process(target=foo())
您告诉Process
目标应该是执行foo
的结果,而不是foo
本身。
请尝试以下方法:
p1 = Process(target=foo) # do not call foo
换句话说,你从
中得到了一个无限循环,而foo
中的True
在那一行上。你看到的“挂起”可能也是一个丢失的诅咒更新吗?萨皮的回答实际上并没有消除我的“悬念”,我仍然看不到“它有效!!”
以下是我对您的代码进行的迭代,它对我更有效:
# -*- coding: utf-8 -*-
import time
import curses
from multiprocessing import Process, Value
shared_mem = Value('i', 1)
def incrementor():
while shared_mem.value > 0:
shared_mem.value += 1
time.sleep(0.001)
screen = curses.initscr()
curses.noecho()
curses.curs_set(0)
screen.keypad(1)
screen.border(0)
screen.addstr(12, 20, "Parent: {}!".format(shared_mem.value))
p1 = Process(target=incrementor)
p1.start()
while True:
# delay in tenths of seconds
curses.halfdelay(5)
screen.addstr(12, 28, "{}!".format(shared_mem.value))
event = screen.getch()
if event == ord("q"):
shared_mem.value = 0
break
curses.endwin()
您将看到,当主程序每半秒刷新一次屏幕时,子进程会增加该值。你可以玩弄这些延迟来了解发生了什么
当然,您也可以在主进程末尾的while循环中添加一行stdscr.refresh()
。再加上sapi的修复,你的程序也将“不挂起”