#PYPY
Explore tagged Tumblr posts
Text
A good year for music if nothing else: Jennifer Kelly’s 2024 review
Ben Chasny came to VT in 2024, go figure.
Things have been feeling very end of the world for a few years now, and 2024 (especially from November on) only intensified my sense of doom. It’ll get worse, too, in 2025. The vilest, stupidest people on earth are in change, and oh boy, do they have a lot of ideas, all of them bad.
But you lived through last year, too, and if you’re lucky, you’ll get to experience whatever hell 2025 brings. It’s scary shit, but also deeply tedious, so let’s talk about music instead.
Because music came through in a big way this year. There was so much of it, and so much that was great.
Live music, for instance, continued to flourish, even in very small markets like Western Massachusetts and southern Vermont and New Hampshire. Bang, right off the bat, we caught Makaya McCraven in February holding court at Brattleboro’s Vermont Jazz Center. With Junius Paul, Brandee Younger and Marquis Hill, he hit the highlights from 2022’s In these Times, mixing up trad jazz, improvisation and hip hop in an intricate mesh, and it was wonderful.
Makaya McCraven and friends
Now let’s jump ahead to May and the always remarkable Thing in the Spring, where Myriam Gendron (with Jim White and Marisa Anderson), Mark Ribot, Earth and many others visited Keene, NH. Wadada Leo Smith played an astonishing set with Shazad Ismaily…even more astonishing, he had to yell at the crowd for quiet.
I even had the chance to see a couple of bands that rarely play live. In August, my friend Chris Liberato booked the super-ish group Winged Wheel to play at a nondescript bar near Springfield Mass. It was revelatory, worth getting lost trying to find 91 in the middle of the night afterwards.
Winged Wheel
Then in November, right around the time, things started getting dark, I hit the lottery. First Haley Fohr and Bill Nace raised the spirits in Keene, a day later the NYC post-punk legends Love Child with Lupo Citta in Easthampton, and a couple of days after that, Ben Chasney and Tashi Dorji in Brattleboro in front of the towering pipe organ at Epsilon Spires.
Love Child
Tashi Dorji
Recorded music came in an avalanche in 2024, just so many good records, month after month after month. I narrowed my favorites down to a list of 42, harder than you’d think, and there are plenty of discs I enjoyed plenty that didn’t make the cut.
Top Ten
Rosali—Bite Down (Merge) My favorite all year long for Rosali’s lovely voice, the instant classic-ness of the songs and the kicking band in Mowed Sound.
Nick Cave & the Bad Seeds—Wild God (PIAS) What I’d really like is another Grinderman, but this lush, string-heavy iteration of the Cave art form is very fine in its own way, not least because it leans on the Bad Seeds more heavily than the last couple. Time for joy indeed.
The Cure—Songs for a Lost World (Polydor) It is not easy to crack my top five in November, but Robert Smith did it with the bleak, soul-stirring grandeur of this late-life epic. It doesn’t hurt that he still sounds exactly like he did in my misspent youth.
Oneida—Expensive Air (Joyful Noise) Oneida has been my favorite working band for decades, and this one follows the song-structured Success with more bangers but also more weirdness. Thalia Zedek sings on two tracks with her signature ragged power.
Miriam Gendron—Mayday (Thrill Jockey) These are just surpassingly beautiful songs about love and death, gorgeously played and sung. Gendron continues to get more comfortable with her art, taking a few more well-worth-it steps from her folk music origins.
PYPY—Sacred Times (Goner) Unhinged post-punk from one of the best in Montreal’s thriving scene. “Lonely Striped Sock” crosses ESG with Delta Five and contains the craziest keyboard lick I’ve heard this year.
MJ Lenderman—Manning Fireworks (ANTI-) One of 2024’s consensus favorites, and for all that, more idiosyncratic and complicated than you’d expect. Genuinely intriguing writing coupled with an incendiary rock roar.
Cassandra Jenkins—My Light My Destroyer (Dead Oceans) A bigger, denser, more accomplished sound for Jenkins than on her magical debut, but no less quirkily intelligent for its beauty.
Mdou Moctar—Funeral for Justice (Matador) Mdou Moctar is maybe the best guitarist in rock music right now, and here’s the kicker, he’s not really in rock music. Searing, wrenching, politically charged Afro-rock from the master.
Another Dancer—I Try to Be Another Dancer (Bruit Direct Disques) This charmingly odd Brussels ensemble skips from detuned Lewsberg-style minimalism to glowing Stereolab raves. Unexpected and intoxicating.
The rest
Winged Wheel—Big Hotel (12XU)
Uranium Club—Infants Under the Bulb (Static Shock)
E—Living Waters (Silver Rocket)
Luppo Citta—S-T (12XU)
Six Organs—Time Is Glass (Drag City)
Des Demonas—Apocalyptic Boom Boom (In the Red)
Guided by Voices—Strut of Kings (GBV Inc.)
Weak Signal—Fine (12XU)
Bonnie “Prince” Billy—Hear the Children/The Evidence (No Quarter)
Yasmin Williams—Acadia (Nonesuch)
Bill Mackay—Locust Land (Drag City)
Hard Quartet—S-T (matador)
The Bug Club—On the Intricate Inner Workings of the System (Sub Pop)
Black Pus—Terrestrial Seethings (Thrill Jockey)
Dummy—Free Energy (Trouble in Mind)
Horse Jumper of Love—Disaster Trick (Run for Cover)
Itasca—Imitation of War (Paradise of Bachelors)
West of Roan—Queen of Eyes (Spinster)
James Elkington & Nathan Salsburg—All Gist (Paradise of Bachelors)
Workers Comp—S-T (Ever/Never)
Jessica Pratt—Here in the Pitch (Mexican Summer)
Aluminum—Fully Beat (felte)
Mary Timony—Untame the Tiger (Merge)
Mount Eerie—Night Palace (P.W. Elverum & Sun)
Penny Arcade—Backwater Collage (Tapete)
Rail Band—S-T (Mississippi)
The Softies—The Bed I Made (Father/Daughter)
Thine Retail Simps—Strike Gold Strike Back Strike Out (Total Punk)
Unknowns—East Coast Low (Drunken Sailor)
Ava Mendoza—Circular Train (Palilia)
Ned Collette—Our Other History (ever/never)
Amelia Courthouse—broken things (Spinster)
The Osees—Sorc 80 (Castle Face)
#yearend 2024#jennifer kelly#dusted magazine#makaya mccraven#ben chasny#wadada leo smith#shazad ismaily#rosali#nick cave and the bad seeds#the cure#oneida#myriam gendron#pypy#mj lenderman#cassandra jenkins#mdou moctar#another dancer
11 notes
·
View notes
Text
For the Record #221: PYPY's "Sacred Times"
Montreal-based PYPY’s second album, 10 years after their first, is an exhilarating blend of psych rock and new wave, with virtuosic instrumentals and otherworldly vocals. We discuss https://fortherecordpodcast.com/podcasts/media/2024-11-02-ftr-episode-221-pypy-sacred-times.mp3
Subscribe to the podcast by clicking here for iTunes: https://itunes.apple.com/us/podcast/for-the-record-with-gg-and-adam/id943710156, or by copying and pasting this XML feed into your favorite podcatcher’s "subscribe" field: http://fortherecordpodcast.com/podcasts/feed.xml
Or tune in to BFF.fm to hear us every other Thursday at 9:30am!
0 notes
Text
PyPy "New York" (official video)
youtube
0 notes
Text
ใช้ FastAPI ให้เร็วขึ้นถึงเกือบเท่า Go Gin
จากบทความก่อนหน้านี้ Python ก็เร็วเท่า GoLang ได้ จริงไหม? เรามาทำให้ FastAPI ของเราให้เร็วขึ้นถึงเกือบเท่า Go Gin ในบทความนี้ จะทำการใช้ Docker เข้ามาช่วยในการทดสอบความเร็วในการประมวลผล ระหว่าง Python3.11 pypy3.10 และ Go1.20.6 นะครับ โดย Docker จะถึงตั้งค่าไว้แบบเดี่ยวกัน และใช้ โค๊ต การทำงานแบบเดียวกัน โค๊ตที่ใช้ในการทดสอบด้วย FastAPI import timeit import platform from fastapi import…
View On WordPress
1 note
·
View note
Text
PyPy European tour underway in a week!
Big up Goner Records for getting on the 2nd PyPy LP… gonna be a banger! Hear their first album “Pagan Day” on Thee Slovenly Bandcamp or anywhere you wanna stream it.
0 notes
Text
So Puyo Puyo Puzzle Pop is out and I see a lot of theories going around… This is half a self-indulgent post for me and half a poorly thrown together essay reviewing Sig and Aya's and the blue soul and the crimson soul's, relationship to each other. because boy is it a bit of a complex web. @_@
Some people were talking about their relationship today in EPPC, and I'm bad at talking to people, so I decided to put my thoughts in a post + touch on some misconceptions (I guess?) around since the game just came out and it relies on knowing information presented in extra material like the audio dramas and the (sega) novels.
And of course, spoilers for the first 4 main routes of Puzzle Pop.
some quick bullet points before I start… you can skip this if youre fairly familiar with fever 2, tetris 2, and the novels
is Aya possessing Sig?!
how did Sig's power get unleashed by Meena? are they super ultra powerful??
no, Aya is clearly still imprisoned safely contained in the tome of sealing, so it probably isn't behind this. We also know in Lidelle's route that it and Klug were having some kind of argument after he ran into Sig.
Well, in the game, Lemres establishes that Meena normally is not that powerful… Rather, it's been a bit implied over the course of the games that his powers have been growing stronger, so I think that it's more that Meena broke down a dam that was already barely holding itself together… a brief timeline���
Puyo Puyo Fever 2 - Sig transfers to Primp Magic School and his hand suddenly turns red. This can presumably be linked to his proximity to the tome of sealing. Akuma attempts to prevent further resonation by using the Ito Hairito enchantment. Attempts at "curing" his hand are touched on in Puyo Puyo! 15th Anniversary
Sig's Secret happens a bit before Puyo Puyo!! 20th Anniversary, and he has the incident of his powers being awakened by Witch's potion. This is the first time we actually see the "Demon part" of him take over, and it turned both of his eyes red when this happened. (src)
Puyo Puyo Tetris 2 - Sig and Klug are protected by a certain power from being influenced by Marle when she's causing mayhem in Primp Town. The crimson spirit was potentially protecting Klug in this situation, but what about Sig? I theorize that his own demon powers, which have been growing stronger, actually protected him as well. (Lemres' substory, PPT2)
Puyo Puyo Puzzle Pop - Sig befriends Meena and offers to share some of his power. This seems to open the floodgates and allow the demon parts of him to take over.
fun fact: The words for "arm" and "hand" are the same in Japanese, so a lot of fans were actually surprised when they saw that his entire arm is red and not just his hand when his art in 20th came out.
Now, with those bullet points out of the way… the meat of this post is focusing more on Sig and Aya/Strange Klug/Possessed Klug/Crimson Spirit/Whatever name you want to call its relationship.
I think most people take the text in the games at face value, though the editing choices in translation don't really help I guess...the first instance of "red power" being translated as "evil power" will never be forgiven, but it's okay since Lemres and Schezo get it right--. I see a lot of people think that Aya is somehow influencing Sig in this story, but it has been established that Sig has the potential to tap into the full power that Aya probably wants access back to in Sig's Secret when Witch's power potion spills on him.
Back then, Sig and Amitie's friendship, and really any of his friendships, weren't very well-defined. However, she was able to bring him back by reminding him of their friendship...
Hey, Sig! …Let’s go back to café prep, alright!? I mean, Raffina’s gonna be super mad if you don’t show up! And then Klug’s gonna go all sarcastic on you again! Do you want that!? And, and, we haven’t even figured out what to put on the menu for our Special yet! If you really want me to, I’ll let you put whipped cream, for real!” I just kept screaming one thing after another as it came to me. Please, please, please… Please, let Sig hear my voice! “Please, come back to us! I promise, we all love you, so, so much! And I know, I know that deep inside, you really, really want to stay with us, too…!”
(src)
He manages to regain control of himself though clearly Amitie reminding him of everything isn't working in Puzzle Pop.
I kind of resummarized the climax of Sig's Secret because it felt important to contextualize his behavior, how its different in Puzzle Pop, and how people tend to conclude that "he must be possessed by Aya" as the first thought in Puzzle Pop. I also did this, though it was because I watched the routes out of order (lol). The behavior of this not!Sig is reckless, power-hungry, very very very gloating (just read the novel), and doesn't see any importance in friendships when it comes to Amitie and Meena (Lemres' route in Puzzle Pop). Meanwhile Aya, who has a very clear outlined goal of getting Sig back is…generally levelheaded, calm, and although angry about its situation, doesn't always charge straight for Sig whenever it's unsealed ("Amitie and Lidelle's Primp Tour", Puyo Puyo!! Quest story mode, etc.) So I think the binary the game presents of Aya being "evil" and Sig being "not evil" is not necessarily true considering how unreliable the narration of the "tome of sealing" is. I find it more accurate to say that they're power/impulse and control/logic, or you could argue they're a conscious and an unconscious.
I theorize that a piece of their original power lies dormant in Sig, and it is this power that Aya specifically wants back because it's…pretty powerless in its current form. This power, possibly the "crimson power", drives the "blue soul" in Sig a bit power hungry when its unleashed, and it has no conscious to control it because the "crimson soul" isn't in the vessel. I also think Sig and the "blue soul" are separate entities to an extent.
“Stop talking… Be quiet, just shut up! Gh… With every word you say, the voice in my head, it…GAAAAHHHH…!” “A voice, in your head? T-That’s gotta be Sig! Hey!! Sig!! If you can hear me, say something!”
(src)
The best comparison I have to this situation is Cinderpelt's reincarnation into Cinderheart in the book series Warriors. Cinderheart inherited Cinderpelt's soul after the latter's death, but because Cinderheart's grown to have her own experiences and is a separate entity while Cinderpelt lay dormant in their mind, they will separate in death. I think this "copilot"-ish situation is the case with Sig and it's why they're vying for control a second time in Puyo Puyo Puzzle Pop.
I think that's why not!Sig is so "evil" and also gives people the impression that it might be Aya -- considering I also thought this -- though it's probably not the case since this story follows a similar formula to Sig's Secret with some tweaks to reflect a lot of subtle character growth, which is the subject of the next section.
Now, people might ask…why aren't Sig's eyes red and his hair dark like they were in Sig's Secret? Well, I think this is due to texture limitations for one, but I also think this is a sign of Sig's personal identity growing stronger over the course of the games. He has relationships he wants to hold onto, his own experiences, his own life, so he wouldn't just easily give up control of his physical vessel, even if he hasn't been speaking as himself in Puzzle Pop so far… This story's already done a lot with establishing Sig as a character and the importance of his relationship with Amitie, and he hasn't even actually spoken, which I find impressive. I also just like that all this stuff is only clear if you pay attention to the steady build up of the stories from the past few years… well, they were just breadcrumbs, I guess...Listen I've been following this plotline for 7-8 years and its been in the works for like 13? So you have to forgive me for feeling happy about having all the pieces of the puzzle.
As for what this means for the role Aya/the crimson spirit will play in the story… I'm not sure. I honestly don't expect it to appear at all since all the models/animations are recycled from Puyo Puyo Chronicle with some touch ups save for Meena. It has been referenced though, and the profiles in-game go in-depth on who it was and is, but I can't say if it'll actually make a fully story appearance…Especially since Klug was relegated to a side story role. Which is fine, I don't really care despite my URL. it was a good story. I do however expect this story to shed a lot of light on the relationship between the Sig, blue soul, and the crimson soul once its complete. I haven't even touched on my personal interpretation of Amitie and her hat, so maybe I'll make another post about that in the future? I think her situation is meant to parallel Sig's, but I'll save that for another time if people are interested...
As usual some of this is my interpretation, but everything I sourced is real and true and I'd never lie to you, etc.
Misc. Fun Stuff
These were things I liked about Aya and Sig's imagery/motifs but I wasn't able to fit into the post concisely.
not!Sig uses the same pronouns as Aya, 我 (wa) and お前 (omae), though they're written in hiragana as opposed to Aya's kanji. This is actually why I thought he was possessed because I walked into a stream in the middle of Ringo's route, haha.
My theory of Aya and Sig being a conscious and an unconscious are actually inspired by one of Aya's spells anima. Now in Latin this really just means "soul" which is fine, but in Jungian psychology the anima and animus are a dualistic archetype…which is cool, though this would potentially mean the crimson spirit is the unconscious part, haha! Technically they'd align more with Freud's concept of an id and a superego as I explained them, but I always like pointing out the possible Jungian reading of Aya's spell Yes, I realize I'm grasping for straws
#ramblings#puyo puyo#anywya feel free to send e lovemail for this . or hatemail if that's more your style#pypy lore
22 notes
·
View notes
Text
just remember. always. that ezra wanted to befriend a literal baby.
#PYPIE MY BELOVED LIL GUY <3#ezra bridger#star wars: rebels#ezra: you can come live with me!#pypie: is a baby
58 notes
·
View notes
Text
comic coming soon, hopefully waiting for it) 🥲
6 notes
·
View notes
Photo
(via A woman is laying on a red blanket. - Glam Girl X)
Visit my website to see photos like this one A woman is laying on a red blanket. - https://glamgirlx.com/a-woman-is-laying-on-a-red-happy-mind-clock?
0 notes
Text
A pernicious potpourri of Python packages in PyPI
ESET Research has discovered a cluster of malicious Python projects being distributed in PyPI, the official Python package repository. The threat targets both Windows and Linux systems and usually delivers a custom backdoor. In some cases, the final payload is a variant of the infamous W4SP Stealer, or a simple clipboard monitor to steal cryptocurrency, or both. In May 2023, we reported on…
View On WordPress
0 notes
Text
PYPY — Sacred Times (Goner)
At various points in Sacred Times, PYPY jitters through a fusillade of funk shrapnel a la ESG, chugs a fuzzy freak beat like the Dirtbombs and tears a hole in the sky psychedelic-style. How you think about this veteran Montreal psych punk band depends, largely, on where you put the needle down, but if the form shifts, the intensity stays constant. This is one of the best punk albums of 2024, and not coincidentally, the hardest to pigeonhole.
This is PYPY’s second full-length album, following a decade-long hiatus in which members revisited other projects. Annie-Claude Deschênes, the singer and keyboardist, Phillippe Clement, the bass player and drummer Simon Besré, all did time in noise-freaked, body-shocked, caterwauling Duchess Says. Guitarist Roy Vucino lent his axe to Wire-y, Pop Group-ish Red Mass (and earlier played with CPC Gangbangs and Les Sexareenos, among others). Still, they meet here, a decade later, in seamless synchrony. Careening vocal flourishes, chaotic beats and incendiary riffs flare within locked-down, disciplined structures. Sacred Time is as tight as it is wild.
Start with the single, “Lonely Striped Sock,” with its lurching bass line, its electroshocked guitar shrieks, its punk goddess deadpan rant. It’s a dead ringer for first wave, female-forward punk bands like ESG and Delta 5—in the best possible way—made fresh and funky by squeaky barrage of keyboard banging (this is literally my favorite sound on the whole record).
The band has a thing about poodles, apparently, dedicating not one but two very different songs to their curly headed canines. “Poodle Escape” rains sublime and radiant surf chords, while a carnivalesque keyboard melody goes soft in the heat. Deschênes whispers ominously in French way back in the mix as a squiggle of sci-fi synth flutters up to the fore. “Poodle Wig” slams and pogoes on a drum machine beat in a Francophile garage rock explosion worthy of Jacques Dutronc. Woof.
Vucino is quite a guitar player, and he lights his instrument pretty much on fire in psychedelic “15 Sec.” a lurid purple haze hanging over its sprawl and mayhem. He sings lead on the Devo-esque “I Am a Simulation” and while not quite as can’t-look-away compelling as Deschênes, his singing another color in PYPY’s considerable palette.
By now you’ve likely gathered that Sacred Times is volatile and wild, taking giant swings in any number of generations. That’s exciting, but even more so because with all that thrashing, they never lose the groove. What a good time these Sacred Times can be.
Jennifer Kelly
#PYPY#sacred times#goner#jennifer kelly#albumreview#dusted magazine#post-punk#punk#esg#delta 5#montreal
4 notes
·
View notes
Text
حزم بايثون الضاره على GitHub و PyPI
هناك العديد من حزم بايثون الضارة المتاحة على GitHub و PyPI. يمكن أن تحتوي هذه الحزم على برامج ضارة مثل البرامج الضارة أو البرامج الخبيثة التي يمكن أن تضر بنظامك أو بياناتك. Continue reading Untitled
View On WordPress
0 notes
Text
hihi tumblr!!!!!!!! m this is jackly shes a shrimp!!!!! :D
#puppy puupy pupy pyppyyyyy pypi dogidogidogidogidogi bit she dosn know what shrimp is!!!!!!!!!!!!!!! hehehe#little pup
1 note
·
View note
Text
Last- und Performance Testing mit Python Request
Ihr kennt das Problem sicherlich auch, der Kunde will "mal eben" einen Last und Performance Test durchführen, um an Ergebnisse zu kommen. Meistens wird dazu immer noch Jmeter genutzt, aber ich zeige euch wie man mit diesem Python Skript viel umfassender und flexibler arbeiten kann. Die Anpassungen sind für jedes mögliches Szenario auslegbar, selbst ich habe noch nicht alle Möglichkeiten dieses Skriptes hier entsprechend angepasst. Einige Ziele, die ich noch nicht umgesetzt habe: - Grafisches Reporting ähnlich Jmeter - Besseres Reporting in HTML oder PDF import requests import threading import time import csv from tqdm import tqdm import statistics import logging # Todo: ## 1. Logging ## 2. CSV-Datei ## 3. Statistiken ## 4. Auswertung ## 5. Ausgabe ## 6. Dokumentation ## 7. Testen #Author: Frank Rentmeister 2023 #URL: https://example.com #Date: 2021-09-30 #Version: 1.0 #Description: Load and Performance Tooling # Set the log level to DEBUG to log all messages LOG_FORMAT = '%(asctime)s - %(name)s - %(levelname)s - %(message)s - %(threadName)s - %(thread)d - %(lineno)d - %(funcName)s - %(process)d - %(processName)s - %(levelname)s - %(message)s - %(pathname)s - %(filename)s - %(module)s - %(exc_info)s - %(exc_text)s - %(created)f - %(relativeCreated)d - %(msecs)d - %(thread)d - %(threadName)s - %(process)d - %(processName)s - %(levelname)s - %(message)s - %(pathname)s - %(filename)s - %(module)s - %(exc_info)s - %(exc_text)s - %(created)f - %(relativeCreated)d - %(msecs)d - %(thread)d - %(threadName)s - %(process)d - %(processName)s - %(levelname)s - %(message)s - %(pathname)s - %(filename)s - %(module)s - %(exc_info)s - %(exc_text)s - %(created)f - %(relativeCreated)d - %(msecs)d - %(thread)d - %(threadName)s - %(process)d - %(processName)s - %(levelname)s - %(message)s - %(pathname)s - %(filename)s - %(module)s - %(exc_info)s - %(exc_text)s - %(created)f - %(relativeCreated)d - %(msecs)d' logging.basicConfig(level=logging.DEBUG, format=LOG_FORMAT, filename='Load_and_Performance_Tooling/Logging/logfile.log', filemode='w') logger = logging.getLogger() # Example usage of logging logging.debug('This is a debug message') logging.info('This is an info message') logging.warning('This is a warning message') logging.error('This is an error message') logging.critical('This is a critical message') logging.info('This is an info message with %s', 'some parameters') logging.info('This is an info message with %s and %s', 'two', 'parameters') logging.info('This is an info message with %s and %s and %s', 'three', 'parameters', 'here') logging.info('This is an info message with %s and %s and %s and %s', 'four', 'parameters', 'here', 'now') logging.info('This is an info message with %s and %s and %s and %s and %s', 'five', 'parameters', 'here', 'now', 'again') logging.info('This is an info message with %s and %s and %s and %s and %s and %s', 'six', 'parameters', 'here', 'now', 'again', 'and again') logging.info('This is an info message with %s and %s and %s and %s and %s and %s and %s', 'seven', 'parameters', 'here', 'now', 'again', 'and again', 'and again') logging.info('This is an info message with %s and %s and %s and %s and %s and %s and %s and %s', 'eight', 'parameters', 'here', 'now', 'again', 'and again', 'and again', 'and again') logging.info('This is an info message with %s and %s and %s and %s and %s and %s and %s and %s and %s', 'nine', 'parameters', 'here', 'now', 'again', 'and again', 'and again', 'and again', 'and again') # URL to test url = "https://example.com" assert url.startswith("http"), "URL must start with http:// or https://" # Make sure the URL starts with http:// or https:// #assert url.count(".") >= 2, "URL must contain at least two periods" # Make sure the URL contains at least two periods assert url.count(" ") == 0, "URL must not contain spaces" # Make sure the URL does not contain spaces # Number of users to simulate num_users = 2000 # Number of threads to use for testing num_threads = 10 # NEW- Create a list to hold the response times def simulate_user_request(url): try: response = requests.get(url) response.raise_for_status() # Raise an exception for HTTP errors return response.text except requests.exceptions.RequestException as e: print("An error occurred:", e) # Define a function to simulate a user making a request def simulate_user_request(thread_id, progress, response_times): for i in tqdm(range(num_users//num_threads), desc=f"Thread {thread_id}", position=thread_id, bar_format="{l_bar}{bar:20}{r_bar}{bar:-10b}", colour="green"): try: # Make a GET request to the URL start_time = time.time() response = requests.get(url) response_time = time.time() - start_time response.raise_for_status() # Raise exception if response code is not 2xx response.close() # Close the connection # Append the response time to the response_times list response_times.append(response_time) # Increment the progress counter for the corresponding thread progress += 1 except: pass # Define a function to split the load among multiple threads def run_threads(progress, response_times): # Create a list to hold the threads threads = # Start the threads for i in range(num_threads): thread = threading.Thread(target=simulate_user_request, args=(i, progress, response_times)) thread.start() threads.append(thread) # Wait for the threads to finish for thread in threads: thread.join() # Define a function to run the load test def run_load_test(): # Start the load test start_time = time.time() response_times = progress = * num_threads # Define the progress list here with tqdm(total=num_users, desc=f"Overall Progress ({url})", bar_format="{l_bar}{bar:20}{r_bar}{bar:-10b}", colour="green") as pbar: while True: run_threads(progress, response_times) # Pass progress list to run_threads total_progress = sum(progress) pbar.update(total_progress - pbar.n) if total_progress == num_users: # Stop when all users have been simulated break time.sleep(0.1) # Wait for threads to catch up pbar.refresh() # Refresh the progress bar display # NEW - Calculate the access time statistics mean_access_time = statistics.mean(response_times) median_access_time = statistics.median(response_times) max_access_time = max(response_times) min_access_time = min(response_times) # NEW -Print the access time statistics print(f"Mean access time: {mean_access_time:.3f} seconds") print(f"Median access time: {median_access_time:.3f} seconds") print(f"Maximum access time: {max_access_time:.3f} seconds") print(f"Minimum access time: {min_access_time:.3f} seconds") #todo: Save the load test results to a CSV file (think about this one) # hier werden die Zugriffszeiten gesammelt #access_times = { # 'https://example.com': , # 'https://example.org': , # 'https://example.net': #} # Calculate the duration of the load test duration = time.time() - start_time # Calculate access times and performance metrics access_times = )/num_threads for i in range(num_users//num_threads)] mean_access_time = sum(access_times)/len(access_times) median_access_time = sorted(access_times) max_access_time = max(access_times) min_access_time = min(access_times) throughput = num_users/duration requests_per_second = throughput/num_threads # Print the load test results print(f"Mean access time: {mean_access_time*1000:.2f} milliseconds") print(f"Load test duration: {duration:.2f} seconds") print(f"Mean access time: {mean_access_time:.3f} seconds") print(f"Median access time: {median_access_time:.3f} seconds") print(f"Maximum access time: {max_access_time:.3f} seconds") print(f"Minimum access time: {min_access_time:.3f} seconds") print(f"Throughput: {throughput:.2f} requests/second") print(f"Requests per second: {requests_per_second:.2f} requests/second") print(f"Number of users: {num_users}") print(f"Number of threads: {num_threads}") print(f"Number of requests per user: {num_users/num_threads}") print(f"Number of requests per thread: {num_users/num_threads/num_threads}") print(f"Number of requests per second: {num_users/duration}") print(f"Number of requests per second per thread: {num_users/duration/num_threads}") print(f"Number of requests per second per user: {num_users/duration/num_users}") print(f"Total duration: {duration:.2f} seconds") print(f"Total progress: {sum(progress)}") print(f"Total progress per second: {sum(progress)/duration:.2f}") print(f"Total progress per second per thread: {sum(progress)/duration/num_threads:.2f}") print(f"Total progress per second per user: {sum(progress)/duration/num_users:.2f}") print(f"Total progress per thread: {sum(progress)/num_threads:.2f}") print(f"Total progress per user: {sum(progress)/num_users:.2f}") print(f"Total progress per request: {sum(progress)/num_users/num_threads:.2f}") print(f"Total progress per request per second: {sum(progress)/num_users/num_threads/duration:.2f}") print(f"Total progress per request per second per thread: {sum(progress)/num_users/num_threads/duration/num_threads:.2f}") print(f"Total progress per request per second per user: {sum(progress)/num_users/num_threads/duration/num_users:.2f}") print(f"Total progress per request per thread: {sum(progress)/num_users/num_threads:.2f}") print(f"Total progress per request per user: {sum(progress)/num_users/num_threads:.2f}") print(f"Total progress per second per request: {sum(progress)/duration/num_users/num_threads:.2f}") print(f"Total progress per second per request per thread: {sum(progress)/duration/num_users/num_threads/num_threads:.2f}") print(f"Total progress per second per request per user: {sum(progress)/duration/num_users/num_threads/num_users:.2f}") # Save the load test results to a CSV file with open("load_test_results.csv", "w", newline='') as csv_file: fieldnames = # Create a CSV writer csv_writer = csv.DictWriter(csv_file, fieldnames=fieldnames, delimiter=",", quotechar='"', quoting=csv.QUOTE_MINIMAL) csv_writer.writeheader() # Write the load test results to the CSV file csv_writer.writerow({"Metric": "Average Response Time (seconds)", "Value": mean_access_time, "Short Value": round(mean_access_time, 3)}) csv_writer.writerow({"Metric": "Load Test Duration (seconds)", "Value": duration, "Short Value": round(duration, 2)}) csv_writer.writerow({"Metric": "Mean Access Time (milliseconds)", "Value": mean_access_time * 1000, "Short Value": round(mean_access_time * 1000, 2)}) csv_writer.writerow({"Metric": "Median Access Time (seconds)", "Value": median_access_time, "Short Value": round(median_access_time, 3)}) csv_writer.writerow({"Metric": "Maximum Access Time (seconds)", "Value": max_access_time, "Short Value": round(max_access_time, 3)}) csv_writer.writerow({"Metric": "Minimum Access Time (seconds)", "Value": min_access_time, "Short Value": round(min_access_time, 3)}) csv_writer.writerow({"Metric": "Throughput (requests/second)", "Value": throughput, "Short Value": round(throughput, 2)}) csv_writer.writerow({"Metric": "Requests per Second (requests/second)", "Value": requests_per_second, "Short Value": round(requests_per_second, 2)}) csv_writer.writerow({"Metric": "Number of Users", "Value": num_users, "Short Value": num_users}) csv_writer.writerow({"Metric": "Number of Threads", "Value": num_threads, "Short Value": num_threads}) csv_writer.writerow({"Metric": "Number of Requests per User", "Value": num_users / num_threads, "Short Value": round(num_users / num_threads)}) csv_writer.writerow({"Metric": "Number of Requests per Thread", "Value": num_users / (num_threads * num_threads), "Short Value": round(num_users / (num_threads * num_threads))}) csv_writer.writerow({"Metric": "Number of Requests per Second", "Value": num_users / duration, "Short Value": round(num_users / duration)}) csv_writer.writerow({"Metric": "Number of Requests per Second per Thread", "Value": num_users / (duration * num_threads), "Short Value": round(num_users / (duration * num_threads))}) csv_writer.writerow({"Metric": "Number of Requests per Second per User", "Value": num_users / (duration * num_users), "Short Value": round(num_users / (duration * num_users))}) csv_writer.writerow({"Metric": "Number of Requests per Minute", "Value": num_users / duration * 60, "Short Value": round(num_users / duration * 60)}) csv_writer.writerow({"Metric": "Number of Requests per Minute per Thread", "Value": num_users / (duration * num_threads) * 60, "Short Value": round(num_users / (duration * num_threads) * 60)}) csv_writer.writerow({"Metric": "Number of Requests per Minute per User", "Value": num_users / (duration * num_users) * 60, "Short Value": round(num_users / (duration * num_users) * 60)}) csv_writer.writerow({"Metric": "Number of Requests per Hour", "Value": num_users / duration * 60 * 60, "Short Value": round(num_users / duration * 60 * 60)}) csv_writer.writerow({"Metric": "Number of Requests per Hour per Thread", "Value": num_users / (duration * num_threads) * 60 * 60, "Short Value": round(num_users / (duration * num_threads) * 60 * 60)}) csv_writer.writerow({"Metric": "Number of Requests per Hour per User", "Value": num_users / (duration * num_users) * 60 * 60, "Short Value": round(num_users / (duration * num_users) * 60 * 60)}) csv_writer.writerow({"Metric": "Number of Requests per Day", "Value": num_users / duration * 60 * 60 * 24, "Short Value": round(num_users / duration * 60 * 60 * 24)}) csv_writer.writerow({"Metric": "Number of Requests per Day per Thread", "Value": num_users / (duration * num_threads) * 60 * 60 * 24, "Short Value": round(num_users / (duration * num_threads) * 60 * 60 * 24)}) csv_writer.writerow({"Metric": "Number of Requests per Day per User", "Value": num_users / (duration * num_users) * 60 * 60 * 24, "Short Value": round(num_users / (duration * num_users) * 60 * 60 * 24)}) csv_writer.writerow({"Metric": "Number of Requests per Month", "Value": num_users / duration * 60 * 60 * 24 * 30, "Short Value": round(num_users / duration * 60 * 60 * 24 * 30)}) csv_writer.writerow({"Metric": "Number of Requests per Month per Thread", "Value": num_users / (duration * num_threads) * 60 * 60 * 24 * 30, "Short Value": round(num_users / (duration * num_threads) * 60 * 60 * 24 * 30)}) csv_writer.writerow({"Metric": "Number of Requests per Month per User", "Value": num_users / (duration * num_users) * 60 * 60 * 24 * 30, "Short Value": round(num_users / (duration * num_users) * 60 * 60 * 24 * 30)}) csv_writer.writerow({"Metric": "Number of Requests per Year", "Value": num_users / duration * 60 * 60 * 24 * 365, "Short Value": round(num_users / duration * 60 * 60 * 24 * 365)}) csv_writer.writerow({"Metric": "Number of Requests per Year per Thread", "Value": num_users / (duration * num_threads) * 60 * 60 * 24 * 365, "Short Value": round(num_users / (duration * num_threads) * 60 * 60 * 24 * 365)}) csv_writer.writerow({"Metric": "Number of Requests per Year per User", "Value": num_users / (duration * num_users) * 60 * 60 * 24 * 365, "Short Value": round(num_users / (duration * num_users) * 60 * 60 * 24 * 365)}) #csv_writer.writeheader() # Add an empty row to separate the access times from the metrics #csv_writer.writerow({"Metric": "Access Time (seconds)", "Value": None}) # Write the access times to the CSV file csv_writer.writerow({"Metric": "Access Time (seconds)", "Value": None}) for access_time in response_times: csv_writer.writerow({"Metric": None, "Value": access_time}) # Sort the response times and write them to the CSV file response_times.sort() for response_time in response_times: csv_writer.writerow({"Metric": None, "Value": response_time}) # Run the load test run_load_test() # Path: Load_and_Performance/test_100_user.py ##### Documentation ##### ''' - The script imports the necessary modules for load testing, such as requests for making HTTP requests, threading for running multiple threads simultaneously, time for measuring time, csv for reading and writing CSV files, tqdm for displaying a progress bar, statistics for calculating performance metrics, and logging for logging messages. - The script defines the URL to test and checks that it starts with "http://" or "https://", that it contains at least two periods, and that it does not contain any spaces. - The script sets the number of users to simulate and the number of threads to use for testing. - The script defines a function called simulate_user_request() that simulates a user making a request to the URL. The function makes a GET request to the URL, measures the response time, and appends the response time to a list called response_times. The function also increments the progress counter for the corresponding thread. The function takes three arguments: thread_id, progress, and response_times. - The script defines a function called run_threads() that splits the load among multiple threads. The function creates a list to hold the threads, starts each thread, and waits for all threads to finish. The function takes two arguments: progress and response_times. - The script defines a function called run_load_test() that runs the load test. The function initializes the response_times list and a progress list that will keep track of the progress for each thread. The function then starts a progress bar using the tqdm module and enters a loop that runs until all users have been simulated. In each iteration of the loop, the function calls run_threads() to split the load among multiple threads, updates the progress bar, and waits for the threads to catch up. Read the full article
0 notes
Text
PYPY en Europe cet été avec Julie Tippex booking!
'The super-group from Montreal composed of members of Duchess Says, The Sexareenos, CPC Gangbangs and Red Mass is to tour Europe in July. They have already been announced at Dour festival and we should be able to tell you more about their other appearances very soon.
youtube
#PYPY#Red Mass#Duchess Says#The Sexareenos#CPC Gangbangs#Julie Tippex#bandsontour2023#slovenly recordings#slovenlyrecordings#dourfestival
0 notes