Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 8, 2018 13:44:51

DamMercul
Зарегистрирован: 2017-11-26
Сообщения: 325
Репутация: +  13  -
Профиль   Отправить e-mail  

Капец космического уровня

Вот отрывки из кода:

 def accepting():
	global SOCKETS_STAT, SOCKETS, IPS
	while not STOP:
		u, i = main_sock.accept()
		u.setblocking(0)
		#SOCKETS.append(u)
		IPS[i] = u
		SOCKETS_STAT[i] = {"our_key": newkeys(1024), "his_key": None, "auth_login": None, "partner_login": None, "accept_pm": True, "ip": i}
		print(SOCKETS_STAT) ########################
После этого SOCKETS_STAT никак не модифицируется, принт выводит все правильно. Нооооо, в другом потоке тем временем(выполняется действие только после accepting:
 def receiving():
	global SOCKETS_STAT
	while not STOP:
		for sock_ip in list(IPS.keys()):  # sock is IP, again. I wanted to use sock link as index, but then realised, that socket object modifies, so it cant be indexed
			sock = IPS[sock_ip]
			
			try: data = sock.recv(4096) 
			except: continue  # No incoming data
			
			if not data:  # Socket is disconnected
				remuser(sock_ip)
				continue
			print(SOCKETS_STAT, sock_ip)  # {} ('127.0.0.1', 54364)   ПОЧЕМУ, ВЕДЬ НИКТО НИЧЕГО НЕ МЕНЯЛ!
		
			if not SOCKETS_STAT[sock_ip]["his_key"]:
                                ...  # И тут как раз и есть ошиька KeyError
Халп пожалуйста, я с этим чатом уже 3ий день… вы поняли

UPD: SOCKETS_STAT дефайнится в начале кода



____________________________________________________

 # Life loop
while alive:
    if (fun > boredom) and money:
        pass_day(fun, boredom, money)
        continue
    else: break

Отредактировано DamMercul (Авг. 8, 2018 13:45:40)

Офлайн

#2 Авг. 8, 2018 14:55:20

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

Капец космического уровня

а вы уверены что SOCKETS_STAT в обоих случая ссылается на один и тот же объект? встроенная id функция вам в помощь



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

Офлайн

#3 Авг. 8, 2018 18:39:11

DamMercul
Зарегистрирован: 2017-11-26
Сообщения: 325
Репутация: +  13  -
Профиль   Отправить e-mail  

Капец космического уровня

Все нормально с ссылками. Просто это я тупанул) RSA ключ создаются немного долговато, а поток с принятием сообщений не ждет, вот и выходит ошибка. Я все испавил - спасибо за ответ



____________________________________________________

 # Life loop
while alive:
    if (fun > boredom) and money:
        pass_day(fun, boredom, money)
        continue
    else: break

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version