Вы можете использовать функции empty () и isset (). Если вы хотите, чтобы он работал с разными файлами, просто измените action='yourphp.php'
на html, который я вам даю, и store the PHP script
на этот файл yourphp.php
. Также вам нужно изменить index.html
на index.php
, чтобы активировать функции PHP.
PHP
<?php
error_reporting(0);
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: yoursite.com';
$to = 'contact@yoursite.com';
$subject = 'Customer Inquiry';
$body = "From: $name\n E-Mail: $email\n Message:\n $message";
if ($_POST['submit']){
if (!(empty($_POST['name']))) {
if (!(empty($_POST['email']))){
if (!(empty($_POST['message']))){
mail ($to, $subject, $body, $from);
echo '<p>Your message has been sent!</p>';
}else{
echo '<p>Fill your message please.</p>';}
}else {
echo '<p>Fill your email please.</p>';}
}else{
echo '<p>Fill your name please.</p>';}
}else{
echo '<p>Fill the form.</p>';}
?>
HTML
<html>
<form method="post" action="?">
<table>
<tr><td>Name</td><td><input type='text' name='name' id='name'/></td></tr>
<tr><td>Email</td><td><input type='text' name='email' id='email'/></td></tr>
<tr><td>Message</td><td><input type='text' name='message' id='message'/></td></tr>
<tr><td></td><td><input type='submit' name='submit' id='submit'/></td></tr>
</table>
</form>
</html>
С наилучшими пожеланиями!
GIL не предотвращает резьбу. Все GIL делает, чтобы только один поток выполнял код Python за раз; управление все еще переключается между потоками.
То, что GIL предотвращает, использует более одного ядра процессора или отдельных процессоров для параллельного запуска потоков.
Это относится только к коду Python , Расширения C могут и освобождают GIL, чтобы позволить нескольким потокам кода C и одному потоку Python работать через несколько ядер. Это распространяется на операции ввода / вывода, управляемые ядром, такие как select()
вызовы для чтения и записи сокетов, что позволяет Python обрабатывать сетевые события с достаточной эффективностью в многопоточной многоядерной установке.
Сколько серверов развертывания затем выполняются, запускается более одного процесса Python, чтобы позволить ОС обрабатывать планирование между процессами для использования ваших процессорных ядер до максимума. Вы также можете использовать библиотеку multiprocessing
для обработки параллельной обработки нескольких процессов из одного кода и родительского процесса, если это подходит для ваших случаев использования.
Обратите внимание, что только GIL применимы к реализации CPython; Jython и IronPython используют другую реализацию потоковой передачи (собственные встроенные потоки Java VM и .NET соответственно).
Для прямого обращения к вашему обновлению: любая задача, которая пытается получить ускорение скорости от параллельного выполнения, используя чистые Python, не будет видеть ускорение, поскольку поточный код Python блокируется для одного потока, выполняемого за раз. Однако, если вы смешиваете только C-расширения и ввод-вывод (например, операции PIL или numpy), и любой C-код может работать параллельно с одним активным потоком Python.
Python threading отлично подходит для создания гибкого графического интерфейса или для обработки нескольких коротких веб-запросов, где ввод-вывод является узким местом больше, чем код Python. Он не подходит для распараллеливания вычислительно интенсивного кода Python, придерживаться модуля multiprocessing
для таких задач или делегировать выделенную внешнюю библиотеку.
Да. :)
У вас есть модуль нижнего уровня thread и более высокий уровень threading . Но вы просто хотите использовать многоядерные машины, модуль multiprocessing - это путь.
Цитата из docs :
< blockquote>В CPython из-за блокировки Global Interpreter Lock только один поток может выполнять код Python сразу (хотя определенные библиотеки, ориентированные на производительность, могут преодолеть это ограничение). Если вы хотите, чтобы ваше приложение лучше использовало вычислительные ресурсы многоядерных машин, вам рекомендуется использовать многопроцессорную обработку. Тем не менее, потоковая передача по-прежнему является подходящей моделью, если вы хотите одновременно запускать несколько задач с привязкой к I / O.
blockquote>
urllib.urlopen()
?), Вызвать один скрипт Python из GUI Python и вызвать несколько PIL (например,Image.transform()
) и numpy ( напримерnumpy.array()
) операций с потоками. И вы предоставили еще несколько примеров в своем комментарии, например, используя несколько потоков для чтения файлов (например,f.read()
?). Я знаю, что исчерпывающий список невозможен, просто нужны типы примеров, которые вы указали в своем обновлении. В любом случае, принял ваш ответ :) – Karim Bahgat 6 January 2014 в 19:50urllib.urlopen()
будет вызывать сетевые сокеты, ожидая ввода-вывода сокетов - прекрасная возможность переключать потоки и делать что-то еще. – Martijn Pieters♦ 6 January 2014 в 19:52