Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 19, 2013 20:07:24

gnom
От:
Зарегистрирован: 2010-09-07
Сообщения: 64
Репутация: +  0  -
Профиль   Отправить e-mail  

Не прерывается поток.

Есть две функции и одна глобальная переменная(флаг), хотя глобальная переменная почему то не отлавливается функциями пишет что ошибка синтаксиса.

[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 говорит что ошибка синтаксиса. Что я делаю не так?
Спасибо.



Офлайн

#2 Дек. 19, 2013 23:14:22

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Не прерывается поток.

gnom
вы не правильно понимаете как работает global, на примере вашего кода нужно везде переделать подобным образом:

global p+=1 # неправильно !
 
global p  # это
p+=1 # правильно



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Дек. 20, 2013 03:04:09

Galvanize
От:
Зарегистрирован: 2011-01-14
Сообщения: 67
Репутация: +  0  -
Профиль   Отправить e-mail  

Не прерывается поток.

Извините что пишу в данной теме.
Всегда считал, что объявление p вне функций (в глобальной области видимости), заменяет использование global каждый раз. Так ли это?



Офлайн

#4 Дек. 20, 2013 04:08:41

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Не прерывается поток.

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()



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version