Глобальная переменная не определена заранее [PYTHON 3] - PullRequest
0 голосов
/ 27 мая 2019

Получил ошибку: Файл "labpm3.py", строка 37, дочерний

print("I'm child pid:", os.getpid(), "my next bro is:", nextS)

NameError: имя 'nextS' не определено.

Я хотел бы знать, что мне следует сделать, чтобы правильно определить глобальную переменную, заранее благодарю за отзыв

import os, time, sys, signal

children = []

count = 0

def parent(nc, numiter):
    nextS = os.getppid()
    i = 0
    while i < nc:
        i+= 1
        newpid = os.fork()
        if newpid == 0:
            child(i)
        else: 
            nextS = newpid
            children.append(nextS)

    i = 0
    while i < numiter:
        os.kill(nextS, signal.SIGALRM)
        time.sleep(1)
        signal.signal(signal.SIGALRM, handler_parent)
        i+=1
    i = 0
    while i < nc:
        os.kill(children[i], signal.SIGUSR1)
        (pid, sts) = os.waitpid(children[i], 0)
        print(pid, os.WEXITSTATUS(sts))
        i+=1


def child(number):
    global nextS
    global count
    print("I'm child pid:", os.getpid(), "my next bro is:", nextS)
    signal.signal(signal.SIGALRM, handler) 
    signal.signal(signal.SIGUSR1, handler2)
    while True:
        time.sleep(10)


def handler(signum, frame):
    global nextS
    global count
    count += 1
    print("I'm child pid:", os.getpid(), "sending signal to:", nextS)
    os.kill(nextsibl, signal.SIGALRM)



def handler2(signum, frame):
    global nextS
    global count    
    sys.exit(count)

def handler_parent(signum, frame):
    global count
    global nextS



try:
    numchild = int(sys.argv[1])
    numiter = int(sys.argv[2])
except:
   print ('First parameter must be a number', sys.argv[1])
   print ('Second parameter must be a number', sys.argv[2])

родитель (numchild, numiter)

1 Ответ

0 голосов
/ 28 мая 2019

Во-первых, вы должны определить переменную вне метода. Например:

c = 0 # global variable

def add():
    global c
    c = c + 2 # increment by 2
    print("Inside add():", c)

add()
print("In main:", c)

Выход:

Inside add(): 2
In main: 2

Подробнее смотрите на https://www.programiz.com/python-programming/global-keyword

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...