Вместо простого удара используйте Make-файл, затем определите количество одновременных заданий с make -jX
, где X количество заданий для выполнения сразу.
Или можно использовать wait
(" man wait
"): запустите несколько дочерних процессов, звоните wait
- это выйдет, когда дочерние процессы закончатся.
maxjobs = 10
foreach line in `cat file.txt` {
jobsrunning = 0
while jobsrunning < maxjobs {
do job &
jobsrunning += 1
}
wait
}
job ( ){
...
}
, Если необходимо сохранить результат задания, затем присвойте их результат переменной. После wait
Вы просто проверяете то, что содержит переменная.
Это, вероятно, довольно легко сделать.
Сопоставления URL-адресов легко построить, например:
urlpatterns = patterns('books.views',
(r'^books/$', 'index'),
(r'^books/(\d+)/$', 'get'))
Django поддерживает сериализацию модели , поэтому легко включить моделей в XML:
from django.core import serializers
from models import Book
data = serializers.serialize("xml", Book.objects.all())
Объедините их с декораторами , и вы сможете создавать быстрые и быстрые обработчики:
from django.http import HttpResponse
from django.shortcuts import get_object_or_404
def xml_view(func):
def wrapper(*args, **kwargs):
result = func(*args, **kwargs)
return HttpResponse(serializers.serialize("xml", result),
mimetype="text/xml")
return wrapper
@xml_view
def index(request):
return Books.objects.all()
@xml_view
def get(request, id):
return get_object_or_404(Book, pk=id)
(пришлось отредактировать наиболее очевидные ссылки.)
+1 для поршня
- (ссылка выше). Раньше я использовал apibuilder
(открытый исходный код Washington Times), но Piston мне проще. Самым трудным для меня является определение структуры URL-адресов для API и помощь с регулярными выражениями. Я также использовал сурлекс , который значительно упрощает эту работу.
Пример использования этой модели для группы
(из системы расписания, над которой мы работаем):
class Group(models.Model):
"""
Tree-like structure that holds groups that may have other groups as leaves.
For example ``st01gp01`` is part of ``stage1``.
This allows subgroups to work. The name is ``parents``, i.e.::
>>> stage1group01 = Group.objects.get(unique_name = 'St 1 Gp01')
>>> stage1group01
>>> <Group: St 1 Gp01>
# get the parents...
>>> stage1group01.parents.all()
>>> [<Group: Stage 1>]
``symmetrical`` on ``subgroup`` is needed to allow the 'parents' attribute to be 'visible'.
"""
subgroup = models.ManyToManyField("Group", related_name = "parents", symmetrical= False, blank=True)
unique_name = models.CharField(max_length=255)
name = models.CharField(max_length=255)
academic_year = models.CharField(max_length=255)
dept_id = models.CharField(max_length=255)
class Meta:
db_table = u'timetable_group'
def __unicode__(self):
return "%s" % self.name
И этот фрагмент urls.py (обратите внимание, что surlex позволяет легко настраивать макросы регулярных выражений):
from surlex.dj import surl
from surlex import register_macro
from piston.resource import Resource
from api.handlers import GroupHandler
group_handler = Resource(GroupHandler)
# add another macro to our 'surl' function
# this picks up our module definitions
register_macro('t', r'[\w\W ,-]+')
urlpatterns = patterns('',
# group handler
# all groups
url(r'^groups/$', group_handler),
surl(r'^group/<id:#>/$', group_handler),
surl(r'^group/<name:t>/$', group_handler),)
Затем этот обработчик будет следить за выводом JSON (по умолчанию), а также может выполнять XML и YAML .
class GroupHandler(BaseHandler):
"""
Entry point for Group model
"""
allowed_methods = ('GET', )
model = Group
fields = ('id', 'unique_name', 'name', 'dept_id', 'academic_year', 'subgroup')
def read(self, request, id=None, name=None):
base = Group.objects
if id:
print self.__class__, 'ID'
try:
return base.get(id=id)
except ObjectDoesNotExist:
return rc.NOT_FOUND
except MultipleObjectsReturned: # Should never happen, since we're using a primary key.
return rc.BAD_REQUEST
else:
if name:
print self.__class__, 'Name'
return base.filter(unique_name = name).all()
else:
print self.__class__, 'NO ID'
return base.all()
Как видите,
Чуть более года назад я написал веб-службу REST на Django для крупной компании в Сиэтле, которая занимается потоковой передачей мультимедиа в Интернете.
Django отлично подходит для этой цели. Как заметил «платный ботаник», конфигурация URL-адресов Django замечательна: вы можете настроить свои URL-адреса так, как вы хотите, и заставить их обслуживать соответствующие объекты.
Единственное, что мне не понравилось: Django ORM абсолютно не поддерживает двоичные большие двоичные объекты. Если вы хотите обслуживать фотографии или что-то в этом роде, вам нужно будет хранить их в файловой системе, а не в базе данных. Поскольку мы использовали несколько серверов, мне приходилось выбирать между написанием моей собственной поддержки BLOB или поиском какой-либо инфраструктуры репликации, которая будет поддерживать все серверы в актуальном состоянии с последними двоичными данными. (Я решил написать собственную поддержку BLOB. Это было несложно, так что меня действительно раздражало, что ребята из Django не справились с этой работой. Должен быть один, а желательно только один, очевидный способ что-то сделать.)
Мне очень нравится Django ORM. Это действительно упрощает работу с базой данных; вам не нужно знать какой-либо SQL. (Мне не нравится SQL, и мне нравится Python, так что это двойная победа.) «Интерфейс администратора», который вы получаете бесплатно, дает вам отличный способ просматривать ваши данные и вставлять данные во время тестирования и разработка.
Я безоговорочно рекомендую Django.
Он может отвечать любыми данными. JSON / XML / PDF / pictures / CSV ...
Сам Django поставляется с набором сериализаторов .
Править
Я только что взглянул на Piston ] - выглядит многообещающе. Лучшая особенность:
Не мешает.
:)
Взгляните на Piston, это мини-фреймворк для Django для создания RESTful API.
Недавняя запись в блоге Эрика Хольшера дает больше информации о преимуществах использования Piston: Большие проблемы в Django, в основном решаемые: API
Что касается вашего комментария о том, что сторонний код не нравится - это очень плохо, потому что подключаемые приложения - одна из величайших особенностей django . Как и другие ответили, поршень сделает большую часть работы за вас.