-Djava.security.policy=server.policy
, а в файле server.policy написатьgrant {
permission java.net.SocketPermission "127.0.0.1:25565", "connect,accept,resolve";
};
import ast
import sys
class DumbLisp(ast.NodeTransformer):
def fix(self, source, result):
ast.copy_location(result, source)
ast.fix_missing_locations(result)
return result
def visit_Expr(self, node):
if isinstance(node.value, ast.Tuple):
t = node.value
if isinstance(t.elts[0], ast.Name):
if t.elts[0].id == 'newif':
_else = [ast.Expr(value=t.elts[3])] if len(t.elts) == 4 else []
_if = ast.If(test=t.elts[1],
body=[ast.Expr(value=t.elts[2])],
orelse=_else)
self.generic_visit(_if)
return self.fix(node, _if)
elif t.elts[0].id == 'define':
assign = ast.Assign(targets=[ast.Name(id=t.elts[1].id, ctx=ast.Store())],
value=t.elts[2])
return self.fix(node, assign)
else:
call = ast.Expr(value=ast.Call(func=t.elts[0], args=t.elts[1:], keywords=[]))
return self.fix(node, call)
return node
with open(sys.argv[1]) as fh:
tree = ast.parse(fh.read())
DumbLisp().visit(tree)
code = compile(tree, filename=sys.argv[1], mode="exec")
exec(code)
(define, a, 1)
(newif, a == 1, (print, 'Yes'), (print, 'No'))
python dumb_translator.py test.dl
import time
from threading import Thread
run = True
def ticker():
while run:
time.sleep(1)
print('Тик')
time.sleep(1)
print('Так')
# Запуск функции ticker в отдельном потоке.
# Параметр daemon=True нужен чтобы
# дочерний поток умирал вместе с основным
# в случае внештатного выхода.
Thread(target=ticker, daemon=True).start()
while run:
command = input('Для выхода введите "exit"\n')
if command.lower() == 'exit':
run = False
import asyncio
import signal
def shutdown():
# Отменяем все задачи, кроме вызвавшей
for task in asyncio.Task.all_tasks():
if task is not asyncio.tasks.Task.current_task():
task.cancel()
async def user_io():
loop = asyncio.get_event_loop()
# Ждём действия от пользователя
while True:
# Запускаем input() в отдельном потоке и ждём его завершения
command = await loop.run_in_executor(None, input, 'Для выхода введите "exit"\n')
if command.lower() == 'exit':
shutdown() # Отменяем все задачи
break # и выходим из цикла
# Сопрограмма, выполняемая параллельно с ожиданием пользовательского ввода
async def task_manager():
counter = 0
while True:
try:
await asyncio.sleep(1)
except asyncio.CancelledError:
break # Выходим из цикла, если задачу отменили
counter += 1
print("I'm a task manager {}!".format(counter))
if __name__ == '__main__':
# Устанавливаем обработчик Ctrl+C
signal.signal(signal.SIGINT, lambda n, f: shutdown())
# Запускаем цикл событий
loop = asyncio.get_event_loop()
# Задача ждущая завершения сопрограм user_io и task_manager
main_task = asyncio.wait([user_io(), task_manager()])
try:
loop.run_until_complete(main_task)
except asyncio.CancelledError:
# Позволяем main_task завершиться
loop.run_until_complete(main_task)
loop.close()
from os.path import splitext
from transliterate import slugify
def slugify_upload(instance, filename):
name, ext = splitext(filename)
return slugify(name) + ext
class Dancer(models.Model):
photo = models.ImageFiled(upload_to=slugify_upload, ...)
...
import asyncio
import aioredis
from tornado import web, websocket
from tornado.ioloop import IOLoop
connections = []
class WSHandler(websocket.WebSocketHandler):
def open(self):
connections.append(self)
def on_message(self, message):
...
def on_close(self):
connections.remove(self)
class GetHandler(web.RequestHandler):
def get(self):
self.render("chat.html")
async def consumer(channel):
while await channel.wait_message():
msg = await channel.get(encoding='utf-8')
for connection in connections:
await connection.write_message(msg)
async def setup():
connection = await aioredis.create_redis('redis://localhost')
channel = await connection.subscribe('notifications')
asyncio.ensure_future(consumer(channel))
application = web.Application([
(r'/', GetHandler),
(r'/chat/', WSHandler),
])
if __name__ == '__main__':
application.listen(8000)
loop = IOLoop.current()
loop.add_callback(setup)
loop.start()
To ensure efficient use of Elastic IP addresses, we impose a small hourly charge if an Elastic IP address is not associated with a running instance, or if it is associated with a stopped instance or an unattached network interface. While your instance is running, you are not charged for one Elastic IP address associated with the instance, but you are charged for any additional Elastic IP addresses associated with the instance.