
Omni
28.08.2016
11:30:49
Брейки надо будет и в тредах поставить тоже, поскольку дебаггер не может его читать, пока он запущен

V
28.08.2016
11:31:12
ага, у меня окошко frames было спрятано, оказывается! так, уже лучше, что-то видно

Omni
28.08.2016
11:32:09
from threading import Thread
from time import sleep
def foo():
sleep(5)
print("hello")
sleep(5)
a=Thread(target=foo)
a.start()
a.join()
Тестовый код, на поиграться

V
28.08.2016
11:32:10
во-во, это у меня сейчас и видно

Google

dexofan
28.08.2016
11:32:53
Поясните за потоки. Как мне делать post запрос к сайту в разных потоках?

Omni
28.08.2016
11:32:59
я поставил брейк на print("hello"), он постоял с этой надписью, а потом всё показал

V
28.08.2016
11:33:29
а слип там обязательно?
в остальном у меня код похож, но брейки в функции почему-то не срабатывают

Omni
28.08.2016
11:36:35

dexofan
28.08.2016
11:37:29
А если при этом нужно писать в файл?


Omni
28.08.2016
11:39:15
А если при этом нужно писать в файл?
Тогда либо из тредов организовываешь доступ в файл и пишешь из них (прописав Lock, конечно), или собираешь через Queue данные и потом пишешь их в файл из основного потока
from threading import Thread, Lock
from time import sleep
import requests
lock = Lock()
def t_request():
r = requests.get("http://www.google.com")
with lock:
with open("bar.txt", 'a') as f:
f.write(r.content.decode())
f.write("#"*100)
l = []
for i in range(4):
a=Thread(target=t_request)
l.append(a)
a.start()
for i in l:
i.join()
Первый вариант, условно
from threading import Thread, Lock
from queue import Queue
from time import sleep
import requests
q = Queue()
def t_request():
r = requests.get("http://www.google.com")
q.put(r.content.decode())
l = []
for i in range(4):
a=Thread(target=t_request)
l.append(a)
a.start()
for i in l:
i.join()
with open("bar.txt", 'a') as f:
while not q.empty():
f.write(q.get())
И второй
Написано на коленке, поэтому советую поиграться самому


V
28.08.2016
11:49:50
о, вроде получилось. а тупой вопрос, когда дебагер останавливает основной поток, дочерние потоки тоже останавливаются или продолжают молотить, если в них брейков нет?

Andrey
28.08.2016
11:50:06

Omni
28.08.2016
11:50:27

Google

Omni
28.08.2016
11:50:54

V
28.08.2016
11:52:15
ах ты ж будь они неладны потоки эти! (подозреваю, это говорит любой начинающий программист)

Omni
28.08.2016
11:52:22
"Фреймы недоступны в неприостановленном потоке"
Но к этому просто надо привыкнуть хорошенько)

V
28.08.2016
11:54:28
ну у меня в свое время так с регулярками было. сначала это казалось какой-то невообразимой хренью, недоступной моему мозгу. а потом что щелкнуло и теперь понять не могу, что там такого непонятного было, все ж просто. надеюсь, с потоками тоже обвыкнусь
бггг, картинка ок

Omni
28.08.2016
11:54:52
надо повторить, а то давно не использовал

V
28.08.2016
11:55:19
ну это как велосипед, один раз научился - потом поедешь по-любому

Omni
28.08.2016
11:55:46
Ещё подстава бывает, когда какая-то библиотека, которую ты импортировал, использует многопоточность под капотом. А потом начинается: "Какого хрена прога не завершается по Ctrl+C?!"

V
28.08.2016
11:57:50
я просто первый раз столкнулся сейчас с потоками и очередью одновременно. почитал доки, вроде все предельно понятно. но на практике поток почему-то зависает в ряде случаев и не пойму почему. такое ощущение, что очередь ждет добавки, а добавлять уже нечего. но отловить, когда это происходит не могу :(

Zart
28.08.2016
11:57:54

Omni
28.08.2016
11:58:30

Zart
28.08.2016
11:58:48
э...
так же?

Omni
28.08.2016
11:59:18
А откуда тогда новый поток?

Zart
28.08.2016
12:00:32
от ОС

V
28.08.2016
12:00:46
подозреваю, он появляется, чтобы сообщить всем присутствующим, кому пора завершиться?

Google

V
28.08.2016
12:01:03
(просто предположение)

Zart
28.08.2016
12:01:04
не совсем, это я просто про детали реализации

V
28.08.2016
12:01:51
...избави нас от винды и не введи во искушение...

Zart
28.08.2016
12:02:10
...и да пройдут долбоёбы красноглазые нахуй
аминь

Omni
28.08.2016
12:02:14

Zart
28.08.2016
12:02:41
как же меня заебали люди, ругающие винду, но не осилившие ни её, ни линукса

V
28.08.2016
12:02:52
не сочтите за развязывание холивара, к слову пришлось
все операционки прекрасны, каждая по своему. в умелых руках

Omni
28.08.2016
12:03:47

Andrey
28.08.2016
12:04:02

Zart
28.08.2016
12:04:23

V
28.08.2016
12:04:33
в соседнем чатике полночи какашками бросались, не начинайте, парни, я просто так ляпнул))

Omni
28.08.2016
12:04:35

V
28.08.2016
12:05:09
лишь бы всем платили хорошо, ос значения не имеет

Omni
28.08.2016
12:05:47

V
28.08.2016
12:06:34
я вообще на мак пересел - это стыдно?))

Omni
28.08.2016
12:06:47

Zart
28.08.2016
12:06:59
метросексуал, йоба

Omni
28.08.2016
12:07:27

Google

Omni
28.08.2016
12:07:48
Я всегда думал, что все художники пересели на мак. Но когда началось "Почему у меня SAI не встаёт на него?!", я понял, что это не 100% лучшая затея.

Zart
28.08.2016
12:10:46
"почему мой кряк не работает на фотошоп?"

Omni
28.08.2016
12:11:19

Zart
28.08.2016
12:13:29
не порти анекдот

V
28.08.2016
12:34:35
хм, открыл для себя threading graph в pycharm и вижу, что застревает у меня не дочерний, а основной поток. и дело похоже, реально, в очереди. q.join() я так понимаю лочит поток и не отпускает его, хотя на каждый .put() вроде как был сделан task_done(). есть какие-то популярные грабли для новичков?

Admin
ERROR: S client not available

Zart
28.08.2016
12:36:11
join ставит текущий поток на паузу и просит ОС продолжить его лишь когда наступит условие

V
28.08.2016
12:44:06
ну я так понимаю условием является пустая очередь?
омг, все заработало. и я под пытками никому не признаюсь в чем было дело. too embarrassing
и большое спасибо за помощь, на тупой ошибке узнал что-то новое про ide

Janek
28.08.2016
13:04:42
Иногда застрянешь на три часа на ошибке. Все пробуешь
Ставишь через каждую строку принты, чтоб отслеживать состояния переменных
А оказывается, что просто опечатался в реторне
Пару раз застревал так

V
28.08.2016
13:13:07
ну вот из этой же оперы проблема была )) пока экспериментировал в воркере цикл сделал не бесконечным и забыл. вот он и не мог очередь очистить

Omni
28.08.2016
13:16:00

Janek
28.08.2016
15:58:53
Кто из вас без специального образования работает уже?

Zloy geniy
28.08.2016
16:00:14
есть вообще люди которые програмируют не ради работы????
а то я смотрю все работяги ...)

Google

Petr
28.08.2016
16:00:22
дык

Zloy geniy
28.08.2016
16:00:34
например взламывать там уметь
изначально цель такая была
а не типо буду зарабатывать много
?

Petr
28.08.2016
16:01:49
щто

Janek
28.08.2016
16:03:24
Я просто фан ловлю
Зарабатываю на нынешней работе не меньше джунов

Zloy geniy
28.08.2016
16:04:08
)))
вот вот

⬗VLAD⌶K⬖
28.08.2016
16:04:11

Janek
28.08.2016
16:04:16
Но хотелось бы кодить начать
В смысле работать кодером

Zloy geniy
28.08.2016
16:04:49
это жестко слишком ))

Janek
28.08.2016
16:05:01
Что?

Zloy geniy
28.08.2016
16:05:13
работать на папика

Pavel
28.08.2016
16:18:35

Zloy geniy
28.08.2016
16:18:52
круто)
Эта группа больше не существует