Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 6, 2009 20:06:15

cutwater
От:
Зарегистрирован: 2009-01-08
Сообщения: 444
Репутация: +  19  -
Профиль   Отправить e-mail  

Поделитесь тестовым заданием по Python

О Jython: Забаньте его кто-нибудь.



Отредактировано (Апрель 6, 2009 20:07:23)

Офлайн

#2 Апрель 6, 2009 20:19:53

Jython
От:
Зарегистрирован: 2009-03-25
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Поделитесь тестовым заданием по Python

что опять не так?



Офлайн

#3 Апрель 7, 2009 14:42:58

dmydry
От:
Зарегистрирован: 2009-03-30
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Поделитесь тестовым заданием по Python

и как понимать?



Офлайн

#4 Апрель 7, 2009 16:18:21

dmydry
От:
Зарегистрирован: 2009-03-30
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Поделитесь тестовым заданием по Python

в общем есть уже 2 ответа..

Кандидат, результаты которого на oDesk составили 2.25 из 5 сказал, что доделать задание не успел, но выслал результат проделанной работы:

Client:

from twisted.internet import reactor, protocol
import time
import datetime

class EchoClient(protocol.Protocol):

def connectionMade(self):
#
for i in range(3):
time.sleep(10)
self.transport.write(“%s %s ” % (i,datetime.datetime.now()))

def dataReceived(self, data):

print “Server:”, data
self.transport.loseConnection()

def connectionLost(self, reason):
print “connection lost”

class EchoFactory(protocol.ClientFactory):
protocol = EchoClient

def clientConnectionFailed(self, connector, reason):
print “Connection failed”
reactor.stop()

def clientConnectionLost(self, connector, reason):
print “Connection lost”
reactor.stop()

f = EchoFactory()

reactor.connectTCP(“localhost”, 8000, f)
reactor.run()

Server:

from twisted.internet import reactor, protocol
import datetime

class Echo(protocol.Protocol):
#Поминутная ротация логов…
CallMin=datetime.datetime.now().minute


def dataReceived(self, data):
SelfMin=datetime.datetime.now().minute
if data != ‘':
self.transport.write(’Data received')
else:
self.transport.write('Data not received')
for a in xrange(100):
logfile = open(“C:\\Temp\\logf”+str(a)+“.txt”, “w”)
print>>logfile, data+'\n'
logfile.close()
if CallMin<SelfMin: # минута прошла
continue
else:
break




#port 8000
factory = protocol.ServerFactory()
factory.protocol = Echo
reactor.listenTCP(8000,factory)
reactor.run()

Кандидат, результаты которого на oDesk составили 2.10 из 5 выслал готовый код с описанием запуска.

Client:

#!/usr/bin/python
# Copyright © 2009 kuznets.off.san by Kuznetsov Aleksandr
“”“
Create a cliet with data manipulate by TCP protocol
”“”

from twisted.internet.protocol import ClientFactory
from twisted.protocols.basic import LineReceiver
from twisted.internet import reactor
from time import gmtime, strftime
import sys
import time

class EchoClient(LineReceiver):
“”“
Main class receive-send data and create
”“”
n=1
def connectionMade(self):
“”“
Starts client work
”“”
self.sendLine(str(self.n)+'-'+strftime(“%H:%M:%S ”, gmtime()))

def dataReceived(self, data):
“”“
Receive the data from the server and send the increment
and server time to the server, every 10 sec
”“”
self.n+=1
self.transport.write(str(self.n)+'-'+strftime(“%H:%M:%S ”, gmtime()))
print “Server said:”, data
time.sleep(10)


class EchoClientFactory(ClientFactory):
“”“
Defined the protocol and raise exeption when connect lost
”“”
protocol = EchoClient

def clientConnectionFailed(self, connector, reason):

print ‘connection failed:’, reason.getErrorMessage()
reactor.stop()

def clientConnectionLost(self, connector, reason):

print ‘connection lost:’, reason.getErrorMessage()
reactor.stop()

def main():
factory = EchoClientFactory()
reactor.connectTCP('localhost', int(sys.argv), factory)
reactor.run()

if __name__ == ‘__main__’:
main()

Server:

#!/usr/bin/python
# Copyright © 2009 kuznets.off.san by Kuznetsov Aleksandr
“”“
Create a server with data manipulate by TCP protocol
”“”

from twisted.internet.protocol import Protocol, Factory
from twisted.internet import reactor
from time import gmtime, strftime
import logging
import sys

### Protocol Implementation

class Echo(Protocol):
“”“
Main class receive-send data and create a writeble log file
”“”
LOG_FILENAME = ‘c:\\log.txt’
logging.basicConfig(filename=LOG_FILENAME,level=logging.DEBUG,)
i=1

def dataReceived(self, data):
“”“
Receive data from client, write it down the log file,
and sent back result to client
”“”
s=strftime(“%S ”, gmtime())
self.transport.write(data)
logging.debug(data)
if self.i%6==0:
self.transport.write(self.LOG_FILENAME)
self.i+=1


def main():
f = Factory()
f.protocol = Echo
reactor.listenTCP(int(sys.argv), f)
reactor.run()

if __name__ == ‘__main__’:
main()


Содержание задания в первом посте этой темы.
Прошу прокомментировать специалистов то, что выполнили кандидаты.



Офлайн

#5 Апрель 7, 2009 16:29:47

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

Поделитесь тестовым заданием по Python

а не проще ли попросить кандидата сделать не большое практическое задание схожее на вашу работу или попросить описать уже имеющийся код!

Офлайн

#6 Апрель 7, 2009 16:49:11

dmydry
От:
Зарегистрирован: 2009-03-30
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Поделитесь тестовым заданием по Python

sypper-pit
имеющегося кода очень много
а небольшое практическое задание - это и есть то, ответы на что прислали.. или я не понял чего-то?



Офлайн

#7 Апрель 7, 2009 16:53:52

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Поделитесь тестовым заданием по Python

Кузнецова берите.

Офлайн

#8 Апрель 7, 2009 18:08:31

dmydry
От:
Зарегистрирован: 2009-03-30
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Поделитесь тестовым заданием по Python

товарищ ваш? :)



Офлайн

#9 Апрель 7, 2009 18:36:31

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Поделитесь тестовым заданием по Python

Обоим незачОт.
За time.sleep в клиенте. Так с twisted вообще нельзя - и свидетельство непонимания работы асинхронных систем. Нужен callLater если уж очень хочется. Плюс deferred не видно совсем - а должны бы быть… Об обработке ошибок говорить не приходится ввиду отсутствия deferred.
Отдельного потока - нет. Ротации логов - нет.
Настройка по номеру порта из command line - корявая. Стандартный путь - twisted services.
Но это уже все мелочи. Главная проблема - непонимание того, как twisted работает. Используют как asyncore какой-то. В условиях, когда рядом нет более опытного товарища, бьющего по рукам - наворотят проблем.

Второй кандидат чуть лучше, но все равно очень плохо.



Офлайн

#10 Апрель 7, 2009 18:51:17

dmydry
От:
Зарегистрирован: 2009-03-30
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Поделитесь тестовым заданием по Python

Андрей Светлов
Ferroman
спасибо, жду ещё комментариев..



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version