Multiprocessos não podem compartilhar variáveis globais | Aprenda a começar com Python – Parte cento e seis
Tags relacionadas:1. ApsaraDB RDS for MySQL
2. Protótipos e herança em JavaScript
Multiprocessos não podem compartilhar variáveis globais | Aprenda a começar com Python – Parte cento e seis
Multiprocessos não podem compartilhar variáveis globais. Duas threads filhas no mesmo processo principal. Threads podem compartilhar variáveis globais do mesmo processo, enquanto processos diferentes mantêm cada um sua própria variável global e não as compartilham.
Múltiplos processos não podem compartilhar variáveis globais
import os , multiprocessing, threading
n = 100
def test () :
global n
n += 1
print( The value of n in 'test===={} is {}' .format( os.getpid (), hex(id(n))))
def demo () :
global n
n += 1
print( The value of n in 'demo===={} is {}' .format( os.getpid (), hex(id(n))))
print( threading.current_thread ().name)
test() # 101
demo() # 102
# Duas threads filhas no mesmo processo principal. Threads podem compartilhar variáveis globais do mesmo processo

# t1 = threading.Thread (target=test)
# t2 = threading.Thread (target=demo)
# t1.start()
# t2.start()
# if __name__ == '__main__':
# Cada processo mantém sua própria variável global e não compartilha variáveis globais
# p1 = multiprocessing.Process (target=test)
# p2 = multiprocessing.Process (target=demo)
# p1.start() # 101
# p2.start() # 101
Exemplo:
from multiprocessing import Process
import os
nums = [ 11 , 22 ]
def work1 () :
"""Código a ser executado pelo processo filho"""
print( "in process1 pid =%d , nums =%s" %( os.getpid (), nums ))
for i in range( 3 ):
nums.append ( i )
print( "in process1 pid =%d , nums =%s" %( os.getpid (), nums ))
def work2 () :
"""Código a ser executado pelo processo filho"""
nums.pop ()
print( "in process2 pid =%d , nums =%s" %( os.getpid (), nums ))
if __name__ == '__main__':
p1 = Process(target=work1)
p1.start()
p1.join()
p2 = Process(target=work2)
p2.start()
print('in process0 pid={} ,nums={}'.format(os.getpid(),nums))
Resultado da execução:
in process1 pid=2707 ,nums=[11, 22]
in process1 pid=2707 ,nums=[11, 22, 0]
in process1 pid=2707 ,nums=[11, 22, 0, 1]
in process1 pid=2707 ,nums=[11, 22, 0, 1, 2]
in process0 pid=2706 ,nums=[11, 22]
in process2 pid=2708 ,nums=[11]
2. Protótipos e herança em JavaScript
Multiprocessos não podem compartilhar variáveis globais | Aprenda a começar com Python – Parte cento e seis
Multiprocessos não podem compartilhar variáveis globais. Duas threads filhas no mesmo processo principal. Threads podem compartilhar variáveis globais do mesmo processo, enquanto processos diferentes mantêm cada um sua própria variável global e não as compartilham.
Múltiplos processos não podem compartilhar variáveis globais
import os , multiprocessing, threading
n = 100
def test () :
global n
n += 1
print( The value of n in 'test===={} is {}' .format( os.getpid (), hex(id(n))))
def demo () :
global n
n += 1
print( The value of n in 'demo===={} is {}' .format( os.getpid (), hex(id(n))))
print( threading.current_thread ().name)
test() # 101
demo() # 102
# Duas threads filhas no mesmo processo principal. Threads podem compartilhar variáveis globais do mesmo processo

# t1 = threading.Thread (target=test)
# t2 = threading.Thread (target=demo)
# t1.start()
# t2.start()
# if __name__ == '__main__':
# Cada processo mantém sua própria variável global e não compartilha variáveis globais
# p1 = multiprocessing.Process (target=test)
# p2 = multiprocessing.Process (target=demo)
# p1.start() # 101
# p2.start() # 101
Exemplo:
from multiprocessing import Process
import os
nums = [ 11 , 22 ]
def work1 () :
"""Código a ser executado pelo processo filho"""
print( "in process1 pid =%d , nums =%s" %( os.getpid (), nums ))
for i in range( 3 ):
nums.append ( i )
print( "in process1 pid =%d , nums =%s" %( os.getpid (), nums ))
def work2 () :
"""Código a ser executado pelo processo filho"""
nums.pop ()
print( "in process2 pid =%d , nums =%s" %( os.getpid (), nums ))
if __name__ == '__main__':
p1 = Process(target=work1)
p1.start()
p1.join()
p2 = Process(target=work2)
p2.start()
print('in process0 pid={} ,nums={}'.format(os.getpid(),nums))
Resultado da execução:
in process1 pid=2707 ,nums=[11, 22]
in process1 pid=2707 ,nums=[11, 22, 0]
in process1 pid=2707 ,nums=[11, 22, 0, 1]
in process1 pid=2707 ,nums=[11, 22, 0, 1, 2]
in process0 pid=2706 ,nums=[11, 22]
in process2 pid=2708 ,nums=[11]
Artigos relacionados
-
6 tecnologias opcionais para armazenamento de dados
Equipe da Base de conhecimento
Explorar mais ofertas especiais
-
Short Message Service (SMS) e Serviço de e-mail
Pacote de 50.000 e-mails a partir de apenas US$ 1,99; 120 mensagens curtas a partir de apenas US$ 1,00
