Разница между dispatch_sync
и dispatch_async
проста.
В обоих ваших примерах TASK 1
всегда будет выполняться до TASK 2
, потому что он был отправлен перед ним.
Однако в примере dispatch_sync
вы не отправите TASK 2
до тех пор, пока TASK 1
не будет отправлен и не будет выполнен . Это называется «блокировка» . Ваш код ждет (или «блокирует») до выполнения задачи.
В примере dispatch_async
ваш код не будет ждать завершения выполнения. Оба блока отправят (и будут выставлены в очередь) в очередь, а остальная часть вашего кода продолжит выполнение этого потока. Затем в какой-то момент в будущем (в зависимости от того, что еще было отправлено в вашу очередь), Task 1
выполнит, а затем выполнит Task 2
.
Таким образом, я упростил этот код, выполнив цикл for по списку 2009-2018 годов и применив функцию для деления каждого элемента в каждом списке на общее количество в каждом списке и умножения его на 100, а затем с помощью pd. DataFrame для создания dataframe и указания имен индексов, которые я бы использовал
a = [x/sum(x)*100 for x in [nine,ten,eleven,twelve,thirteen,fourteen,fifteen,sixteen,seventeen,eighteen]]
pd.DataFrame(a, index= my_names)
Общая форма будет
ser = []
for year in my_names:
ser.append(
x/sum(fb_posts2[fb_posts2['year']==year].groupby('title').size()) * 100
Или, как понимание списка:
ser = [x/sum(fb_posts2[fb_posts2['year']==year].groupby('title').size()) * 100
for year in my_names]
Это должно быть в состоянии заменить ваши 3 набора из 10 повторяющихся строк.