Вопрос 1: под питоном多线程
ограничения и多进程
Как передать параметры в ?
Многопоточность Python имеет глобальную блокировку интерпретатора (сокращенно GIL), этот GIL не является особенностью python, это концепция, представленная только в интерпретаторе Cpython и в интерпретаторах, написанных на других языках без этого GIL, например: Jython.
Смысл этой блокировки в том, что только один поток может использовать интерпретатор в любой момент времени.Это означает запуск нескольких программ на одном процессоре.Мы все используем его по очереди.Это называется "concurrency", а не "parallel".
Почему существует ГИЛ?
Появление многоядерных процессоров, полное использование многоядерных процессоров и внедрение многопоточного программирования постепенно популяризируются.Трудность заключается в непротиворечивости данных и синхронизации состояний между потоками.
Когда речь заходит о блокировках интерпретатора GIL, легко подумать, что, когда глобальные переменные совместно используются несколькими потоками, между потоками будет конкуренция ресурсов за глобальные переменные, и модификация глобальных переменных не даст желаемых результатов. время мы использовали блокировку взаимного исключения в модуле потока в python, и в этом случае только один поток может получить глобальную переменную каждый раз, когда он работает с глобальной переменной; см. следующий код:
import threading
global_num = 0
def test1():
global global_num
for i in range(1000000):
global_num += 1
print("test1", global_num)
def test2():
global global_num
for i in range(1000000):
global_num += 1
print("test2", global_num)
t1 = threading.Thread(target=test1)
t2 = threading.Thread(target=test2)
t1.start()
t2.start()
Затем присоединитесь к мьютексу
import threading
import time
global_num = 0
lock = threading.Lock()
def test1():
global global_num
lock.acquire()
for i in range(1000000):
global_num += 1
lock.release()
print("test1", global_num)
def test2():
global global_num
lock.acquire()
for i in range(1000000):
global_num += 1
lock.release()
print("test2", global_num)
t1 = threading.Thread(target=test1)
t2 = threading.Thread(target=test2)
start_time = time.time()
t1.start()
t2.start()
В каких ситуациях подходит многопоточность:
Поскольку GIL может быть освобожден при выполнении трудоемких операций ввода-вывода, можно использовать многопоточность в коде с интенсивным вводом-выводом.
В каких ситуациях подходит использование многопроцессорности:
Для интенсивных вычислений, таких как расчет размера определенной папки
Обмен данными между несколькими процессами
Делитесь данными между несколькими процессами, вы можете использовать multiprocessing.Value и multiprocessing.Array
Вопрос 2: Объясните синтаксис питона и/или
bool and a or b
Эквивалентно bool?a:b
>>> a = "first"
>>> b = "second"
>>> 1 and a or b # 输出内容为 'first'
>>> 0 and a or b # 输出内容为 'second'
Вы должны понимать вышеприведенное содержание, но все еще есть проблема, см. следующий код.
>>> a = ""
>>> b = "second"
>>> 1 and a or b # 输出内容为 'second'
Поскольку a — это пустая строка, которая Python считает ложной в логическом контексте, это выражение «не сработает» и вернет значение b. Если вы не думаете об этом как о синтаксисе типа bool ?a : b , а как о чистой логической логике, то вы правильно поняли. 1 верно, а ложно, поэтому 1 и ложно. ложь или b есть b.
Трюк и/или должен быть инкапсулирован в функцию:
def choose(bool, a, b):
return (bool and [a] or [b])[0]
Поскольку [a] — непустой список, он никогда не будет ложным. Даже если a равно 0 или ” или другому ложному значению, list[a] является истинным, поскольку содержит один элемент.
Вопрос 3: Укажите не менее 5 спецификаций PEP8?
Официальный документ спецификации PEP8:Woohoo.Python.org/Dev/PEPs/PE…PEP8 китайский перевод:Woo Woo Woo.cn Blog On.com/ahjianbe кто-то ...
Это основано на обычном накоплении.
- отступ. 4 пробела для отступа (все редакторы могут это делать), без тапа, не говоря уже о смеси тапа и пробелов.
- Максимальная длина каждой строки — 79. Вы можете использовать обратную косую черту для новых строк, предпочтительно круглые скобки. Точка перевода строки - нажать Enter после оператора.
- Две пустые строки между определениями классов и функций верхнего уровня, одна пустая строка между определениями методов в классах, одна пустая строка между логически не относящимися к делу абзацами в функциях, пустых строк больше нет в других местах.
- Блокируйте комментарии, комментарии добавлены перед блоком кода. Добавьте пространство после «#». Абзацы разделены только «#» линиями
- Не добавляйте все виды места до закрытия скобок.
- Не добавляйте пробелы перед запятыми, двоеточиями или точками с запятой.
- Не ставьте пробел перед открывающей скобкой функции.
- Не ставьте пробел перед открывающей скобкой последовательности.
- Добавляйте пробел слева и справа от оператора, не добавляйте пробелы для выравнивания.
- Оператор присваивания, используемый для параметра функции по умолчанию, не содержит пробелов вокруг него.
- Не пишите несколько операторов в одной строке, хотя использование ';' позволяет. В операторе i-f/for/while, даже если оператор выполнения представляет собой только одно предложение, он должен начинаться с новой строки.
- Первый параметр метода класса должен быть self, а первый параметр статического метода должен быть cls.
Вопрос 4: Разница между HTTPS и HTTP:
- Протокол https требует определенных экономических затрат, чтобы подать заявку на сертификат до ок.
- http — это передача в открытом виде, https — зашифрованная безопасная передача
- Порт подключения другой, http 80, https 443
- HTTP-соединение очень простое и не имеет состояния; https — это зашифрованная передача ssl, сетевого протокола для аутентификации личности, который более безопасен, чем HTTP-передача.
Там еще много всего, разбирайтесь сами
Вопрос 5: Кратко опишите форму Джанго
ORM, все заклинания Object-Relation Mapping, что означает объектно-реляционное сопоставление
Реализована развязка модели данных и базы данных, а базу данных можно легко заменить за счет простой настройки, без необходимости модификации кода, требуется только объектно-ориентированное программирование Операции ORM по существу транслируются в соответствующие операторы SQL в соответствии с подключенным механизмом базы данных. Все проекты, разработанные с помощью Django, не должны заботиться о том, чтобы нижний уровень программы использовал MySql, Oracle, SQLite.... Если база данных переносится, необходимо только заменить механизм базы данных Django.
Вопрос 6: Следите за вопросом, недавно обновленная волшебная серия вступительных статей на официальном аккаунте
ее диплом колледжа 27 лет, изучаю языки программирования c, c++, python с нуля 29-летняя девушка пишет 100 учебных пособий по кейсам Овладеть 10 языками программирования к 30 годам, Скажу вам с опытом самообучения, чтобы научиться программировать, нужно найти ластик мечты
Добро пожаловать, обратите внимание на ее общедоступный номер, ищите - программист без бакалавриата.