Как произвести на разработчиков впечатление [закрытым] IronPython/Python

Сброс соединения просто означает, что TCP RST был получен. Это происходит, когда Ваша коллега получает данные, которые это не может обработать, и могут быть различные причины этого.

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

В других случаях, прошедшем брандмауэре или даже сам удаленный хост мог бы "забыть" о Вашем соединении TCP. Это могло произойти, если Вы не отправляете данных в течение долгого времени (2 часа общий тайм-аут), или потому что одноранговый узел был перезагружен и потерял его информацию об активных соединениях. Отправка данных по одному из этих более не существующих соединений вызовет RST также.

<час>

Обновление в ответ на дополнительную информацию:

Внимательно изучают Вашу обработку SocketTimeoutException. Это исключение повышено, если настроенный тайм-аут превышен, в то время как заблокировано на эксплуатации сокета. Состояние самого сокета не изменяется, когда это исключение выдается, но если Ваш обработчик исключений закроет сокет, и затем попытается записать в него, Вы будете в условии сброса соединения. setSoTimeout() предназначен, чтобы дать Вам очевидный способ для убегания read() операция, которая могла бы иначе заблокироваться навсегда, не делая грязных вещей как закрытие сокета от другого потока.

10
задан Dror Helper 1 August 2013 в 13:37
поделиться

13 ответов

Я бы сделал быструю демонстрацию чего-нибудь тривиального (по крайней мере, на Python), но классного в IDLE. Например:

>>> text = # some nice long text, e.g. the Gettysburg Address
>>> letters = [c.lower() for c in text if c.isalpha()]
>>> letters
    ['f', 'o', 'u', 'r', 's', 'c', 'o', 'r', 'e', 'a', 'n', 'd', 's', 'e', 'v', 'e',
    ...
>>> freq = {}
>>> for c in letters:
        freq[c] = freq.get(c, 0) + 1

>>> freq
    {'a': 102, 'c': 31, 'b': 14, 'e': 165, 'd': 58, 'g': 28, 'f': 27, 'i': 68, 'h': 80, 
    ...
>>> for c in sorted(freq.keys(), key=lambda x: freq[x], reverse=True):
        print c, freq[c]

e 165
t 126
a 102
...

Здесь показано, как выглядят базовые классы списков и словарей, как работают списки, именованные аргументы, лямбда-выражения, полезность интерактивного интерпретатора и выполняется довольно сложная задача в семи строках кода.

Редактировать:

О, а затем я бы показал, как работает код, если вы установите букв с помощью выражения генератора:

letters = (c.lower() for c in text if c.isalpha())

... то есть точно так же .

6
ответ дан 3 December 2019 в 13:18
поделиться

Корректор орфографии Питера Норвига в 21 строке Python 2.5.

19
ответ дан 3 December 2019 в 13:18
поделиться

Перепишите любое небольшое приложение C # в IronPython и покажите им, сколько строк кода оно взял тебя. Если это не впечатляет, я не знаю, что это такое.

Я имею в виду одно из ваших внутренних приложений.

9
ответ дан 3 December 2019 в 13:18
поделиться

Может быть, что-нибудь простое, но классное с генераторами?

def isprime(n):
    return all(n%x!=0 for x in range(2, int(n**0.5)+1))

def containsPrime(start, limit):
    return any(isPrime(x) for x in xrange(start, limit))
3
ответ дан 3 December 2019 в 13:18
поделиться

Как насчет демонстрации утиного набора текста? Например, перенаправление StdOut на графический интерфейс.

Или некоторые из исключительно полезных чистых библиотек Python (в моей работе приходит на ум SqlAlchemy, ваш опыт может отличаться).

Некоторые короткие фрагменты синтаксис тоже подойдет, например:

Получите быстрый обзор большого набора данных:

print data[::1000]

Найдите все строки, начинающиеся с 'a':

[s for s in list_of_strings if s.startswith('a')]

Затем покажите им версию генератора:

the_as = (s for s in really_big_list_of_strings if s.startswith('a'))
the_as.next()
3
ответ дан 3 December 2019 в 13:18
поделиться

Я должен согласиться Geo. Показывать приложение C # или VB рядом с тем же приложением, написанным на IronPython. Когда я выступал с докладами на IronPython, я добился большого успеха в преобразовании кода C # в Python. Это делает презентацию очень драматичной.

Я также большой поклонник демонстрации того, как утка делает ваш код более тестируемым.

3
ответ дан 3 December 2019 в 13:18
поделиться

Вы можете использовать пример helloworld CherryPy :

import cherrypy

class HelloWorld(object):
    def index(self):
        return "Hello World!"
    index.exposed = True

cherrypy.quickstart(HelloWorld())
2
ответ дан 3 December 2019 в 13:18
поделиться

Как насчет генератора простых чисел.

>>> def sieve(x):
...    if x: return [ x[0] ] + sieve([ y for y in x if y % x[0] > 0 ])
...    return []
... 
>>> sieve(range(2,100))
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
1
ответ дан 3 December 2019 в 13:18
поделиться

Show them an example from the IronPython cookbook like this one on DataGridView Custom Formatting. It's not terribly flashy, but it is something that everyone will be familiar with because just about everyone has built an app with a gridview (or wants to do so).

The most important part of your demo will be the code walkthrough where you point out how things are less verbose than C# and more similar to VB.

Make sure to change the example from the cookbook to show some of the batteries included from Python. Perhaps use the os module to get a directory listing and populate the grid with filename, size, date created, etc.

1
ответ дан 3 December 2019 в 13:18
поделиться

At the very basic level you could show a string reversal program in C# and Python.

In C#:

public static string ReverseString(string s)
{
    char[] arr = s.ToCharArray();
    Array.Reverse(arr);
    return new string(arr);
}

In Python:

s[::-1]

I feel that you should demo multiple examples rather than just one. Build up from something simple, like the one above, and go to more complex ones.

4
ответ дан 3 December 2019 в 13:18
поделиться
import clr
clr.AddReference('System.Speech')
clr.AddReference('System.Xml')

from System.Speech.Synthesis import SpeechSynthesizer
from System.Net import WebClient
from System.Xml import XmlDocument, XmlTextReader


content = WebClient().DownloadString("http://twitter.com/statuses/public_timeline.xml")
xmlDoc = XmlDocument()
spk = SpeechSynthesizer()

xmlDoc.LoadXml(content)
statusesNode = xmlDoc.SelectSingleNode("statuses")
for status in statusesNode:
    s = "<?xml version=\"1.0\"?><speak version=\"1.0\" xml:lang=\"en-US\"><break/>"
    s = s + status.SelectSingleNode("text").InnerText + "</speak>"
    spk.SpeakSsml(s)

A talking Twitter client. For more examples http://www.ironpython.info/index.php/Main_Page

4
ответ дан 3 December 2019 в 13:18
поделиться

Возможность сделать это благодаря способности IronPython добавлять новые члены в тип во время выполнения произвела на меня впечатление

http://ironpython-resource.com/post/2008/08/23 /IronPython-Dynamically-creating-objects-and-binding-them-to-a-form.aspx

0
ответ дан 3 December 2019 в 13:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: