Ir para o conteúdo
JoaoRodrigues

Threading Module

Mensagens Recomendadas

JoaoRodrigues    0
JoaoRodrigues

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Sven    1
Sven

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
JoaoRodrigues    0
JoaoRodrigues

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?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pedrotuga    31
pedrotuga

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

eu simplesmente importei o módulo.

import threading

funciona sem problemas

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
djthyrax    11
djthyrax

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
JoaoRodrigues    0
JoaoRodrigues

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..

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
JoaoRodrigues    0
JoaoRodrigues

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pedrotuga    31
pedrotuga

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)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
djthyrax    11
djthyrax

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...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Sven    1
Sven

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

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade