• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

JoaoRodrigues

Threading Module

14 mensagens neste tópico

Vocês conseguem usar o vosso? Eu tento e dá-me isto:

Time Elapsed: 30.2441420555
-------------------------

Now with MT...
Traceback (most recent call last):
  File "threading.py", line 1, in <module>
    import threading, os, time
  File "/home/joao/Desktop/threading.py", line 19, in <module>
    class myThread(threading.Thread):
AttributeError: 'module' object has no attribute 'Thread'

O código em Python que tento executar é:

import threading, os, time

print 'I will ping a dozen sites...'
print '\n\nWithout MT...'
time_start = time.time()

site_list = ['www.google.com', 'www.yahoo.com', 'www.msn.com', 'www.pubmed.org', 'www.portugal-a-programar.org', 'woc.uc.pt/bioquimica']

for i in site_list:
command = 'ping -c 3 '+i
os.system(str(command))

time_finish = time.time()

print 'Time Elapsed:',time_finish-time_start

print '-'*25+'\n\nNow with MT...'

class myThread(threading.Thread):
def __init__(self, command):
	Thread.__init__(self)
	self.command = command
def run(self):
	os.system(str(command))

for i in site_list:
time_start = time.time()
command = 'ping -c 3 '+i
current = myThread(command)
current.start()
time_finish = time.time()
print 'Time Elapsed:',time_finish-time_start

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não tou muito por dentro do python, mas ...

ao fazeres import ele apenas importa o modulo por isso para te referires a objectos desse modulo tens que usar a sintaxe modulo.objecto.funcao

se fizeres from modeulo import * ele ja te importa o modulo e os objectos la contidos

tenta com  threading.Thread.__init__()

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

yaps, o problema é mesmo esse, estás a referir-te a uma classe que não existe.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O meu problema é que se eu fizer

from threading import Thread

ou

from threading import *

dá o mesmo erro.. em windows já não dá erro... será problema de linux?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Qual é o nome do ficheiro que estás a usar para testar o código?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu usei precisamente essa técnica no youtube_miner, extender a class Thread.

eu simplesmente importei o módulo.

import threading

funciona sem problemas

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Now with MT...

Traceback (most recent call last):

  File "threading.py", line 1, in <module>

    import threading, os, time

  File "/home/joao/Desktop/threading.py", line 19, in <module>

    class myThread(threading.Thread):

AttributeError: 'module' object has no attribute 'Thread'

Como podes ver pedrotuga, ele está a incluir o próprio ficheiro. Ele pode experimentar trocar o nome do ficheiro e voltar a tentar. :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Gracias :D Já não dá erro.

Mas já agora, o output agora é nulo.. ou seja, não me dá nada. Há maneira de ver se as threads são abertas? A função é chamada (verifiquei com uns prints) mas cheira-me que as threads não funcionam..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Fiz e funciona.. já posto o código e o output

Now with MT...
ping -c 3 www.google.com
ping -c 3 www.yahoo.com
ping -c 3 www.msn.com
ping -c 3 www.pubmed.org
ping -c 3 www.portugal-a-programar.org
ping -c 3 woc.uc.pt/bioquimica
Time Elapsed: 0.000221014022827
ping: unknown host woc.uc.pt/bioquimica
Yo
ping: unknown host woc.uc.pt/bioquimica
Yo
ping: unknown host woc.uc.pt/bioquimica
Yo
ping: unknown host woc.uc.pt/bioquimica
Yo
ping: unknown host woc.uc.pt/bioquimica
Yo
ping: unknown host woc.uc.pt/bioquimica
Yo

 """Continua de cima"""
class myThread(Thread):
def __init__(self, command):
	Thread.__init__(self)
	self.command = command
	print self.command
def run(self):
	os.system(str(command))
	print 'Yo'

for i in site_list:
time_start = time.time()
command = 'ping -c 3 '+i
current = myThread(command)
current.start()
time_finish = time.time()
print 'Time Elapsed:',time_finish-time_start

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

djthyrax... não percebi o que quiseste dizer dois posts acima.

Ora ve lá o link que eu afixei.

Ele não está a usar sintaxe de acesso a objectos consistente.

tipo...

import threading

threading.Thread() <---- isto pode-se usar

Thread() <--- isto não

from threading import thread
Thread() <--- isto já se pose usar

Moral da história, no código dele, o objecto 'threading' não estava definido.

class myThread(threading.Thread):
def __init__(self, command):
	Thread.__init__(self) #<---aqui tem que ser threading.Thread.__init__(self)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pedrotuga, mas o thyrax tinha razão. Eu estava a chamar o meu próprio módulo. Mudei o nome e deu ;) Fora aquele problema :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pedrotuga, isso já não sei, mas parece o erro mais gritante era mesmo o do nome do ficheiro.

Em relação ao erro, tu estás a pingar host/URI no caso do endereço da UC...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

djthyrax... não percebi o que quiseste dizer dois posts acima.

O problema estava na importação do modulo treading, que  está num ficheiro chamado treading.py algures na pasta do site-packages (ou algo parecido)

O python importa os módulos procurando na path por um ficheiro com esse nome, essa path é um array em que a primeira posição tem a path de onde o programa se encontra e nas restantes as path's do systema e das classes do python (um pouco como a classpath do java, um print sys.path e entendes logo o que tou a dizer).

Como o ficheiro dele tem o mesmo nome do módulo e a path de onde  programa se encontra na primeira posição ele vai importar o próprio ficheiro em vez de importar o módulo pois encontrou um treading.py e não vai procurar mais

É esta a razão do objecto treading não estar definido pois nunca chegou a ser importado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora