Найти - Пользователи
Полная версия: Не прерывается поток.
Начало » Python для экспертов » Не прерывается поток.
1
gnom
Есть две функции и одна глобальная переменная(флаг), хотя глобальная переменная почему то не отлавливается функциями пишет что ошибка синтаксиса.
[code python]import thread
from time import sleep
l=thread.allocate_lock()


def fun():
while True:
print('function1')
sleep(1)
global p+=1

def by():
while True:
sleep(1)
if ( global p>10):
pass
print('function2')


while True:
global p=0
l=thread.allocate_lock()
potok1=thread.start_new_thread(fun,())
sleep(0.5)
potok2=thread.start_new_thread(by,())
sleep(3)
l.acquire()
sleep(3.5)
l.release()[/code]


Я хочу остановить поток-функцию by при p>10, но почему то python говорит что ошибка синтаксиса. Что я делаю не так?
Спасибо.
JOHN_16
gnom
вы не правильно понимаете как работает global, на примере вашего кода нужно везде переделать подобным образом:
global p+=1 # неправильно !
 
global p  # это
p+=1 # правильно
Galvanize
Извините что пишу в данной теме.
Всегда считал, что объявление p вне функций (в глобальной области видимости), заменяет использование global каждый раз. Так ли это?
JOHN_16
Galvanize
нет, инструкция global задает глобальную переменную в текущей области видимости. ВОт этот код имеет глобальную для модуля исполнения переменную a, в функции foo для ее области видимости мы объявляет глобальную переменную a. Но во вложенной функции spam этого не делаем. В результате при выполнении в ней a+=1 произойдет ошибка, так как в локальной области видимости упоминание об a нет.
a=1
def foo():
	global a
	print a
	a=2
	
	def spam():
		a+=1
		print a
	spam()
foo()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB